【问题标题】:OpenCV mass center pointOpenCV质心点
【发布时间】:2015-04-01 20:51:57
【问题描述】:

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

【问题讨论】:

  • 您能澄清一下您的问题吗?看起来你的代码是正确的。您是在问如何访问 x 和 y 坐标,或者您的计算是否正确?
  • @Felipe 我通过以下方式理解这个问题:“您显示的代码是点 mc 向量的初始化,然后您必须找到质心(重心),所以你计算任何给定点到这个重心的距离。”如有必要,请提供额外说明。
  • 当然,抱歉。我的代码运行良好,在我的情况下我有一个轮廓(至少预期一个轮廓),我如何访问质心的坐标?

标签: c++ opencv image-processing measurement


【解决方案1】:

首先,您应该通过索引来获取要点。让:

int size = contours.size();

索引是:i = 0 ... size。索引i 处的点是

mc[i];

可以通过以下方式到达该点的坐标:

float xCoor = mc[i].x;
float yCoor = mc[i].y;

如果您想读取所有mc 点的所有坐标,当然可以从i = 0 to size 循环读取这些值。

编辑: 我假设你知道如何找到质心,只是问如何获得坐标。但是,如果您想获得质心以及从质心到其他点的距离,那么您可以执行以下操作:

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

是质心到其他点的距离。

希望有帮助!

【讨论】:

  • 完美解决方案...优雅。
【解决方案2】:

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

检查您的向量中是否至少有一个点。

【讨论】:

  • 问题是:“如何找到 mc 的坐标,以便计算质心与其他点之间的距离。”
  • @erolyeniaras 这就是我理解你的问题的方式:“你显示的代码似乎是点向量的初始化mc,然后你必须找到质心(重心),所以你计算任何给定点到这个重心的距离。”请提供一些说明
  • 如果他问如何计算质心坐标或如何获取(读取)质心坐标,我有点困惑。
  • 啊,对不起,他的问题 :) 是的,不是很清楚。
  • 我明白了,我可以读取每个索引的质心坐标!谢谢
猜你喜欢
  • 2012-02-22
  • 2012-07-31
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2015-12-27
  • 2018-09-09
  • 2012-09-01
相关资源
最近更新 更多