opencv 求连通区域的重心

主要步骤

实现代码

#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;

int main()
{
    Mat src = imread("F:\\testdata\\test.jpg", 0);
    threshold(src, src, 0, 255, THRESH_OTSU);
    //获取图像轮廓
    vector<vector<Point>>contours;  //每个轮廓中的点
    vector<Vec4i>hierarchy;         //轮廓的索引???  
    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;
}

程序效果

原图


test.jpg

标记重心


res.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。