使用 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。
我使用此处提供的代码找到了图像中多个对象的质心 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。