OpenCV质量中心点

时间:2015-04-01 20:51:57

标签: c++ opencv image-processing measurement

我找到了不规则形状的质心,但现在我需要计算到任何给定点的距离。 我知道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 );
}

2 个答案:

答案 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].xmc[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();

检查载体中至少有一个点。