美文网首页
opencv 求连通区域的重心

opencv 求连通区域的重心

作者: kuizhu | 来源:发表于2018-07-13 16:42 被阅读0次

主要步骤

实现代码

#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

相关文章

网友评论

      本文标题:opencv 求连通区域的重心

      本文链接:https://www.haomeiwen.com/subject/snhspftx.html