使用OpenCV绘制连接对象质心的线
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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 ++中实现]
输出图像
所需图像
另外,如果将'color'变量替换为BGR值,则代码似乎没有显示质心。如果我想看到形心,似乎轮廓和形心必须具有相同的颜色。当我为轮廓提供((0,255,255,0)并为质心提供(255,255,0)时,质心未显示。
答案
对于给定的样本图像,您可以使用convexhull获得中心的顺序,然后使用polylines绘制它们。
以上是关于使用OpenCV绘制连接对象质心的线的主要内容,如果未能解决你的问题,请参考以下文章