2015-04-01 87 views
2

我发现一个不规则形状的质心,但现在我需要计算到任何给定点的距离。 据我所知,MC是一个点的载体,但我怎么能找到MC的坐标,这样我就可以计算质量中心和其他一些point.ThanksOpenCV质心点

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); 
} 
+1

请问您能澄清一下您的问题吗?它看起来像你的代码是正确的。你问如何访问x和y坐标,或者你的计算是否正确? – Aurelius 2015-04-01 21:23:51

+0

@Felipe我用下面的方法理解这个问题:“你显示的代码是点mc向量的初始化,然后你必须找到质心(重心),以便计算任何距离给予这个重心的点。“如有必要,请提供补充说明。 – Antonio 2015-04-01 21:42:06

+0

当然,对不起。我的代码运行良好,在我的情况下,我有一个轮廓(至少预计有一个轮廓),我如何访问质心的坐标? – Felipe 2015-04-02 01:40:35

回答

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); 

为重心到另一个点的距离。

希望有帮助!

+0

你说得对!对不起,谢谢你! – Felipe 2015-04-02 01:52:16

+0

完美的解决方案...优雅。 – Brian 2017-09-26 14:11:33

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(); 

检查你有你的矢量至少一个点。

+0

问题是:“我如何找到mc的坐标,以便我可以计算质心与其他点之间的距离。” – 2015-04-01 21:16:41

+0

@erolyeniaras这就是我理解你的问题的方法:“你所显示的代码似乎是一个点'mc'向量的初始化,然后你必须找到质心(重心),以便计算任意距离给予这个重心的点。“请提供一些说明 – Antonio 2015-04-01 21:19:52

+0

如果他询问如何计算质心坐标或如何获取(读取)质心坐标,我有点困惑。 – 2015-04-01 21:38:44