【OpenCV】图片几何特征提取

2016年08月16日 16:57:18 番茄发烧了 阅读数:673

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bless2015/article/details/52222832

上一版不太好,又重新自己了一遍。

#include<cv.h>
#include<highgui.h>
using namespace cv;
using namespace std;
CvMemStorage *stroage;
IplImage *contourimage;
CvSeq *seq = NULL;
int ku = -1;
double pi = 3.141592;
int main()
{stroage = cvCreateMemStorage();Mat src = imread("E:\\14.jpg");Mat I;medianBlur(src, I, 3);//blur(src, I, Size(3, 3), Point(-1, -1));//GaussianBlur(src, I, Size(3, 3), 0, 0);//bilateralFilter(src, I, 5, 0.0, 10.0);contourimage = cvCreateImage(cvGetSize(&(CvMat)I), 8, 1);cvtColor(I, I, CV_BGR2GRAY);Mat contours;Canny(I, contours, 100, 255);threshold(contours, contours, 100, 255, CV_THRESH_TRUNC);int numcontours = cvFindContours(&(CvMat)contours, stroage, &seq, sizeof(CvContour), CV_RETR_LIST);CvMoments moments;CvHuMoments hu;cvMoments(&(CvMat)I, &moments, 0);cvGetHuMoments(&moments, &hu);if (ku != numcontours){ku = numcontours;printf("contournum:::: %d \n", numcontours);}CvSeq *c = 0;int zz = 0;int totl = 0;cvSet(contourimage, cvScalar(255, 0, 255));cvSet(contourimage, cvScalar(125, 0, 125));CvPoint2D32f center;float radius;CvPoint2D32f rectpoint[4];CvContour *testcontour = 0;//c为轮廓顶点数组for (c = seq; c != NULL; c = c->h_next){// 取得轮廓面积double testdbArea = fabs(cvContourArea(c, CV_WHOLE_SEQ));//取得轮廓长度double testdbLength = cvArcLength(c);c->block_max;if (testdbArea >= 50 && testdbLength <= 5000){//点集的最外面(up-right)矩形边界CvRect testrect = cvBoundingRect(c);//轮廓最小外界矩形CvBox2D testbox = cvMinAreaRect2(c);//cvDrawContours(&(CvMat)contours, c, cvScalar(0, 255, 255), cvScalar(0, 255, 0), 0, 2);cvRectangle(&(CvMat)contours, cvPoint(testrect.x, testrect.y + testrect.height), cvPoint(testrect.x + testrect.width, testrect.y), cvScalar(255, 0, 255), 1);double width = testrect.width;double height = testrect.height;double juxingmianji = width*height;//找外界圆//cvMinEnclosingCircle(c, &center, &radius); //cout <<  radius << endl;//cout << center.x << ";" << center.y << endl;//画外接圆//cvCircle(&(CvMat)contours, cvPointFrom32f(center), (int)radius, cvScalar(255, 0, 255), 2);//特征1矩形度float mianjibi = testdbArea / juxingmianji;//特征2延长度float changkuanbi = width / height;//特征3周长比float zhouchangbi = 2 * (height + width) / testdbLength;//特征4似圆度float r = 4 * pi*testdbArea / (testdbLength*testdbLength);//特征5形状复杂性float e = (testdbLength*testdbLength) / testdbArea;//不动点特征 hu.hu1    hu.hu2cout << "矩形度:" << mianjibi << endl;cout << "延长度:" << changkuanbi << endl;cout << "周长比:" << zhouchangbi << endl;cout << "似圆度:" << r << endl;cout << "形状复杂性:" << e << endl;cout << "一阶矩:" << hu.hu1 << endl;cout << "二阶矩:" << hu.hu2 << endl;}}namedWindow("Canny");imshow("Canny", contours);waitKey();return 0;
}

【OpenCV】图片几何特征提取相关推荐

  1. opencv图片线性混合可调

    opencv图片线性混合叠加.addWeighted()函数 直接上效果图 通过滚动条选择不同的透明值,使得两张图片进行不同程度的线性混合. 主要的代码是这句:addWeighted()函数 //根据 ...

  2. 2020-12-03 Python OpenCV: 图片的裁剪

    Python OpenCV: 图片的裁剪 图片裁剪使用img[y0:y1, x0:x1],其中参数分别代表y轴和x轴的起始坐标,具体使用方法如下: import cv2img = cv2.imread ...

  3. python+freetype+opencv 图片中文(汉字)显示 详细图文教程和项目完整源代码

    opencv图片写入中文(汉字)有两方法: 方法一: python+opencv+freetype https://blog.csdn.net/wyx100/article/details/75579 ...

  4. opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍

    本文来自于段力辉 译<OpenCV-Python 中文教程> 文章目录 一.图片 + 读入.显示.写出 1.cv2.imread() 2.cv2.imshow() 3.cv2.imwrit ...

  5. Pyhton opencv 图片裁剪

    Pyhton opencv 图片裁剪 opencv中可以通过 imread,imwrite进行图片读取和保存,imread读取图片后可以通过长度高度进行图片的裁剪 从上面图片可以得到,对角坐标是(x1 ...

  6. Python OpenCV 图片滑块验证码 滑块图片验证码 快速自动识别方案 代码简单 模板匹配识别 识别成功率达90%+

    前言 通过上一篇的文章大家已经对图片滑块验证码已经有了初步的了解,图片滑块验证码的核心关键在于图片识别接下来接入讲解.因为初版滑块图片识别虽然能识别验证码,通过一些策略调整也相对提高了一些图片识别率, ...

  7. 三:OpenCV图片颜色通道数据转换

    对图片进行操作时经常会涉及到不同通道数据提取,在OpenCV中提供了很多比较便捷的操作函数,本文涉及函数如下: 1.cvtColor 颜色空间转换 2.convertTo 图片数据类型转换 3.spl ...

  8. python opencv 图片/视频 拼接

    python opencv 图片/视频 拼接 # coding: utf-8 # 像写诗一样写代码 import numpy as np import cv2img_A_path = "C: ...

  9. python pyqt5图片(QPixmap)和opencv图片数据结构相互转换

    python pyqt5图片(QPixmap)和opencv图片数据结构相互转换 在python中使用pyqt5和opencv混合编程时,有时需要两种图片数据结构的相互转换.网上比较多的是把openc ...

最新文章

  1. 网久环境服务启动命令
  2. 3种python调用其他脚本的方法,你还知道其他的方法吗?
  3. 信息学奥赛一本通(2055:【例3.5】收费)
  4. Eclipse自动生成作者、日期注释功能设置
  5. 邮箱与手机做账号的验证实例
  6. slam无人车在web端地图编辑
  7. 不同数据库限制取前N条记录
  8. 柠檬班软件测试002软件测试的定义
  9. 小白交易第一站—50EX云合约交易平台
  10. 同比、环比的区别及计算公式
  11. 随心所遇,随遇而安。
  12. 捉奸游戏之后,中年危机游戏也来了。。
  13. jQuery入门与实战
  14. Delphi连接Access数据库图文教程(1)
  15. VLAN应用篇系列:(7)华为 H3C交换机VLAN聚合功能(实现不同VLAN,同一网段,二层隔离,三层互通)
  16. 如何进行强制类型转换?
  17. 红色微粒体工作述职报告PPT模板
  18. python 写文件 编码_python 读写文件的编码问题
  19. 优秀程序员值得借鉴的一些信息
  20. android中图片适配器,Android UI适配总结之图片适配(1)

热门文章

  1. 记一次npm install 报RequestError: connect ETIMEDOUT 20.205.243.166:443和RequestError: socket hang up
  2. 机构树的数据库设计与查询构想-使用递归算法
  3. CF1601E Phys Ed Online题解
  4. 几个适合车载的ITX/MATX服务器主板信息总结
  5. 随机森林、LGBM基于贝叶斯优化调参
  6. CSDN如何获得积分白嫖资源?
  7. 花式打印菱形图案!!
  8. 获取一个月有多少天,生成日历
  9. 如何将单线程爬虫改成多线程
  10. 鼠眼看Linux调度器 by raise_sail @ chinaunix