如何估计我检测到的不规则圆的半径?我使用findContours()
查找圆圈的位置并使用moments()
来查找质心。我现在只需要圆的半径,所以我可以估计它的体积。
为了找到轮廓,我使用了以下代码:
findContours(Closed_Image, Contours, Hierarchy,
CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0,0) );
为了找到质心,我使用了以下代码:
vector<Moments> mu(Contours.size() );
b = 0;
for(b = 0; b < Contours.size(); b++)
{
mu[b] = moments(Contours[b], true);
}
vector<Point2f> mc(Contours.size() );
c = 0;
for(c = 0; c < Contours.size(); c++)
{
mc[c] = Point2f(mu[c].m10/mu[c].m00, mu[c].m01/mu[c].m00);
cout << "Contours Centre = " << mc[c] << endl;
}
我猜我需要使用存储在Contours
中的轮廓点,但形状不是一个完美的圆,所以轮廓中每个点与其质心之间的距离会有所不同。这只是平均质心与轮廓中每个点之间的距离(平均距离=半径)的问题吗?如果是这样,我该如何实际实现它(我不确定如何访问vector<vector<Point> > Contours;
中的数据)。否则,我怎样才能实现估计半径?
(Click here for the image I am working with)
质量中心如下:[424.081, 13.4634], [291.159, 10.4545], [157.833, 10.4286], [24.5198, 8.09127]