我使用此处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 ++来实现
输出图像
所需图片
另外,要注意的是,如果用BGR值替换'color'变量,则代码似乎没有显示质心。如果我想看到形心,似乎轮廓和形心必须具有相同的颜色。当我为轮廓给出(0,255,255)而为质心给出(255,0)时,质心未显示。