opencv 求连通区域的重心

主要步骤

  • findContours获取连通域轮廓
  • 通过Moments对象获取轮廓所在重心
  • findContours函数的讲解

实现代码

#include
#include
using namespace std;
using namespace cv;

int main()
{
    Mat src = imread("F:\\testdata\\test.jpg", 0);
    threshold(src, src, 0, 255, THRESH_OTSU);
    //获取图像轮廓
    vector>contours;  //每个轮廓中的点
    vectorhierarchy;         //轮廓的索引???  
    findContours(src, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());

    for (int i = 0; i < contours.size(); ++i) 
    {
        Mat tmp(contours.at(i));
        Moments moment=moments(tmp, false);
        if (moment.m00 != 0)//除数不能为0
        {
            int x = cvRound(moment.m10 / moment.m00);//计算重心横坐标
            int y = cvRound(moment.m01 / moment.m00);//计算重心纵坐标
            circle(src, Point(x, y), 5, Scalar(0));
        }

    }
    imshow("src", src);
    waitKey(0);
    return 0;
}

程序效果

原图


opencv 求连通区域的重心_第1张图片
test.jpg

标记重心


opencv 求连通区域的重心_第2张图片
res.jpg

你可能感兴趣的:(opencv 求连通区域的重心)