opencv3计算图像轮廓的中心矩

来源:互联网 发布:java中什么是构造方法 编辑:程序博客网 时间:2024/05/28 11:28
#include<iostream>#include<opencv2/opencv.hpp>#include<vector>using namespace cv;using namespace std;int main(){Mat srcImage = imread("group.jpg");imshow("【原图】", srcImage);//首先对图像进行空间的转换Mat grayImage;cvtColor(srcImage, grayImage, CV_BGR2GRAY);//对灰度图进行滤波GaussianBlur(grayImage, grayImage, Size(3, 3), 0, 0);imshow("【滤波后的图像】", grayImage);//为了得到二值图像,对灰度图进行边缘检测Mat cannyImage;Canny(grayImage, cannyImage, 128, 255, 3);//在得到的二值图像中寻找轮廓vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(cannyImage, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));//绘制轮廓for (int i = 0; i < (int)contours.size(); i++){drawContours(cannyImage, contours, i, Scalar(255), 1, 8);}//计算轮廓的矩vector<Moments> g_vMoments(contours.size());for (int i = 0; i < (int)contours.size(); i++){g_vMoments[i] = moments(contours[i], true);}//输出所有轮廓的矩for (int i = 0; i < (int)contours.size(); i++){cout << "【用矩计算出来的第" << i << "个轮廓的面积为:】" << g_vMoments[i].m00 << endl;}/**************************************************中心矩计算公式**************************************************///利用计算得到的 矩 计算中心矩vector<Point2f> centerMoments(contours.size());for (int i = 0; i < (int)contours.size(); i++){centerMoments[i] = Point2f(float(g_vMoments[i].m10 / g_vMoments[i].m00), float(g_vMoments[i].m01 / g_vMoments[i].m00));}//将得到的中心矩显示出来for (int i = 0; i < (int)contours.size(); i++){//参数中的 -1 表示填充circle(cannyImage, (Point)centerMoments[i], 5, Scalar(255), -1, 8);}imshow("【处理后的图像】", cannyImage);waitKey(0);return 0;}

0 0
原创粉丝点击