使用 OpenCV 绘制连接对象质心的线

Draw lines connecting centroids of objects using 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), rng.uniform(0, 255));
                //Drawing contour
                drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, cv::Point());
                //Drawing circles with centroid as centre
                circle(drawing, mc[i], 4, color, -1, 8, 0);
            }

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

输出图片

想要的图片

另外,另一方面,如果我用 BGR 值替换 'color' 变量,代码似乎不会显示质心。如果我想看到质心,似乎轮廓和质心都必须是相同的颜色。当我给轮廓 (0,255,255) 和质心 (255,255,0) 时,质心没有显示。

对于给定的示例图像,您可以使用 convexhull to obtain the order of centers, and then draw them with polylines