我找到了不规则形状的质心,但现在我需要计算到任何给定点的距离。 我知道mc是一个点的矢量,但我怎样才能找到mc的坐标,这样我才能计算出质量中心和其他点之间的距离。谢谢
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 );
}
答案 0 :(得分:6)
首先你应该通过索引得到点。让:
int size = contours.size();
指数是:i = 0 ... size
。索引i
处的点是
mc[i];
可以通过以下方式达到该点的坐标:
float xCoor = mc[i].x;
float yCoor = mc[i].y;
当然,如果您想要阅读所有i = 0 to size
点的所有坐标,您可以在mc
的循环中读取这些值。
修改强> 我以为你知道如何找到质量中心,只是问如何获得坐标。但是如果你想获得质量中心以及从质心到其他点的距离,那么你可以做到以下几点:
float distance;
float totalX=0.0, totalY=0.0;
for(int i=0; i<size; i++) {
totalX+=mc[i].x;
totalY+=mc[i].y;
}
Point2f massCenter(totalX/size, totalY/size); // condition: size != 0
Point2F someOtherPoint(someXVal, someYVal);
distance = massCenter.distance(someOtherPoint);
是从质心到其他点的距离。
希望有所帮助!
答案 1 :(得分:1)
mc[i].x
和mc[i].y
是索引i的x和y坐标。
计算质心:
cv::Point2f baricenter(0,0);
for( int i = 0; i < mc.size(); i++ )
barycenter += mc[i];
barycenter.x /= mc.size();
barycenter.y /= mc.size();
检查载体中至少有一个点。