美文网首页
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