opencv基础之测试质心和圆形度
来源:互联网 发布:如何查看已占用的端口 编辑:程序博客网 时间:2024/06/07 05:37
#include<iostream>#include"opencv2\opencv.hpp"#include<math.h>using namespace std;using namespace cv;RNG g_rng(12345);int g_nElementShape=MORPH_RECT;Mat srcImage, dstImage;void centerPoints(vector<Point>contour);int main(){ srcImage = imread("bw_0133.png", 0);//读取文件,可以是文件目录 if (!srcImage.data){ printf("图片读取错误!\n"); return false; } namedWindow("原图"); imshow("原图", srcImage); //进行开运算平滑 //namedWindow("【开运算/闭运算】", 1); Mat dstImage = Mat::zeros(srcImage.rows, srcImage.cols, CV_8UC3); Mat element = getStructuringElement(g_nElementShape, Size(5, 5), Point(-1, -1)); morphologyEx(srcImage, dstImage, MORPH_OPEN, element, Point(-1, -1),2); imshow("【开运算/闭运算】", dstImage); vector<vector<Point>>contour;//用来储存轮廓 vector<Vec4i>hierarchy; findContours(dstImage, contour, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); for (unsigned int i = 0; i < contour.size(); ++i) { centerPoints(contour[i]; } Mat drawing = Mat::zeros(dstImage.size(), CV_8UC3); for (int unsigned i = 0; i < contour.size(); i++) { Scalar color = Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)); drawContours(drawing, contour, i, color, 1, 8, vector<Vec4i>(), 0, Point()); } imshow("轮廓图", drawing);//画出轮廓线,在轮廓线上显示坐标 //计算矩 vector<Moments>mu(contour.size()); for (unsigned int i = 0; i < contour.size(); i++) { mu[i] = moments(contour[i], false); } //计算矩中心 vector<Point2f>mc(contour.size()); for (unsigned int i = 0; i < contour.size(); i++) { mc[i] = Point2f(static_cast<float>(mu[i].m10 / mu[i].m00), static_cast<float>(mu[i].m01 / mu[i].m00)); } for (unsigned int i = 0; i< contour.size(); ++i) { circle(drawing, mc[i], 5, Scalar(0, 0, 255), -1, 8, 0); rectangle(drawing, boundingRect(contour.at(i)), Scalar(0, 255, 0)); char tam[100]; sprintf_s(tam, "(%0.0f,%0.0f)", mc[i].x, mc[i].y); putText(drawing, tam, Point(mc[i].x, mc[i].y), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 0, 255), 1); //计算质心 坐标 cout << "质心点坐标:" << "(" << (int)mc[i].x << "." << (int)mc[i].y << ")" << endl; //下标输出 } namedWindow("Contours", WINDOW_AUTOSIZE); imshow("Contours", drawing); waitKey(0); return 0;}void centerPoints(vector<Point>contour){ double factor = (contourArea(contour) * 4 * CV_PI) / (pow(arcLength(contour, true), 2)); cout << "factor:" << factor << endl; //计算出圆形度factor}
阅读全文
0 0
- opencv基础之测试质心和圆形度
- OpenCV目标跟踪之质心跟踪(Centroid)
- OpenCV 轮廓质心
- opencv提取目标质心
- 源码解读----之_kmeans_single_lloyd和_kmeans_single_elkan初始化质心的方法
- 质心
- OpenCV之CvANN_MLP和CvSVM测试
- 重心和质心的区别
- opencv之2D点集最小外包矩形和圆形
- OpenCV实践之路——圆形切割和矩形切割
- OpenCV实践之路——圆形切割和矩形切割
- 利用OpenCV求取图像多轮廓质心,并在输出图像上显示质心坐标
- opencv基础之滤波
- openCV之基础数据结构
- 轻质杆两端小球和质心运动动画
- 使用OpenCV中的moments类计算物体质心位置
- openCV实现图片的时钟和中心圆形扩大效果
- opencv识别圆形
- CodeForces
- Struts2-数据验证
- 51Nod 1012 最小公倍数LCM
- 在eclipse中安装jad
- BZOJ-2301-莫比乌斯
- opencv基础之测试质心和圆形度
- console, terminal, tty, pty是啥?
- CodeForces
- python学习笔记
- jdbc操作工具类
- java面试题去除一个int整数的重复数字然后倒着输出
- wdlinux一键安装包
- 【知了堂学习笔记】css3 transform 3d制作字母开门3D效果
- 云计算之路-阿里云上-新车限行:新购服务器无法访问任何远程25端口