【OpenCV】图片几何特征提取
来源:互联网 发布:海马苹果助手mac下载 编辑:程序博客网 时间:2024/04/30 00:41
上一版不太好,又重新自己了一遍。
#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, ¢er, &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.hu2 cout << "矩形度:" << 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;}
0 0
- 【OpenCV】图片几何特征提取
- opencv-图片特征点提取
- OpenCV特征提取
- OpenCV特征提取
- OpenCV特征提取相关
- Opencv 特征提取总结
- OpenCV提取HOG特征
- OpenCV提取SIFT特征
- Opencv SIFT特征提取
- opencv特征提取
- 【OpenCV】图像特征提取
- opencv 特征提取综述
- 【OpenCV】SIFT特征提取
- opencv特征提取
- opencv提取SIFT特征
- 目标检测的图像特征提取之(四)OpenCV中BLOB特征提取与几何形状分类
- 使用opencv对图片进行边缘特征提取
- 图片特征提取
- js传多个参,并相加求和
- 记得,遗忘
- php处理复杂xml数据示例
- python3爬虫--抓取网页信息
- 代理模式
- 【OpenCV】图片几何特征提取
- 线程Runnable接口使用 start()方法
- DirectX3D游戏制作之---粒子效果的实现
- 84. Largest Rectangle in Histogram(难)
- Python 的 GIL 是什么,多线程性能究竟如何
- 为页面添加正确的doctype声明-W3C标准
- 最长可整合数组
- Java线程面试题 top 50
- AIX 用户和组管理