使用OpenCV

我使用此处OpenCV examples

提供的代码发现了图像中多个对象的质心。

这是找到质心并将其存储在向量中的代码。

cv::Mat InputImage;
    cv::Mat CannyOutput;
    vector<vector<cv::Point> > contours;
    vector<Vec4i> hierarchy;
    RNG rng(12345);
    InputImage = cv::imread("Untitled.jpg");

    //Edge detection
    Canny(InputImage,CannyOutput,100,150);

    //Contour detection
    cv::findContours(CannyOutput,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cv::Point(0,0));

    //Finding Moments

    vector<Moments> mu(contours.size());
        for (int i = 0; i < contours.size(); i++)
            {
                mu[i] = moments(contours[i],false);
            }

    //Calculating Centroid

    vector<Point2f> mc(contours.size());
        for (int i = 0; i < contours.size(); i++)
            {
                mc[i] = Point2f(mu[i].m10 / mu[i].m00,mu[i].m01 / mu[i].m00);
            }

    // Drawing 
    Mat drawing = Mat::zeros(CannyOutput.size(),CV_8UC3);
        for (int i = 0; i< contours.size(); i++)
            {
                Scalar color = Scalar(rng.uniform(0,255),rng.uniform(0,255));
                //Drawing contour
                drawContours(drawing,i,color,2,8,cv::Point());
                //Drawing circles with centroid as centre
                circle(drawing,mc[i],4,-1,0);
            }

我想要做的是绘制一个以质心为顶点的多边形。我使用了drawcontours,polyline和line函数,但没有得到理想的结果。有没有办法做到这一点? 。我需要用C ++来实现

输出图像

使用OpenCV

所需图片

使用OpenCV

另外,要注意的是,如果用BGR值替换'color'变量,则代码似乎没有显示质心。如果我想看到形心,似乎轮廓和形心必须具有相同的颜色。当我为轮廓给出(0,255,255)而为质心给出(255,0)时,质心未显示。

lxxlwj 回答:使用OpenCV

对于给定的示例图像,您可以使用convexhull获取中心的顺序,然后使用polylines绘制中心。

本文链接:https://www.f2er.com/3052785.html

大家都在问