2017-04-20 345 views
1

我将在coloumn [i]中创建一个矩阵,其中包含从一个固定点(轮廓的质心(mc(i)))到轮廓点的距离[一世]。查找从轮廓到点的距离opencv C++

这是我找到的轮廓和质量中心代码:此代码运行良好

findContours(binMat, contours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE,Point(0,0)); 

/// Get the moments 
vector<Moments> mu(contours.size()); 
for (int i = 0; i < contours.size(); i++) 
{ 
    mu[i] = moments(contours[i], false); 
} 

/// Get the mass centers 
vector<Point2f> mc(contours.size()); 
for (int i = 0; i < contours.size(); i++) 
{ 
    mc[i] = Point2d(mu[i].m10/mu[i].m00, mu[i].m01/mu[i].m00); 
} 

接下来,我尝试了很多方法来找到距离,但有很多问题,因为我是用C++进行新编程并使用OpenCV。

回答

1
for (int i = 0; i < contours.size(); i++) 
{ 
    mc[i] = Point2d(mu[i].m10/mu[i].m00, mu[i].m01/mu[i].m00); 

    KeyPoint k; 
    k.pt = mc[i]; 

    float d = (k.pt.x,k.pt.y, centerX,centerY); 
} 

2点

float distance(int x1, int y1, int x2, int y2) 
{ 

    float d = sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2)); 

    return d; 
} 
+1

谢谢易卜拉欣!你的建议很有用,我用这种方法解决了这个问题:'vector mc(contours.size()); \t raggio.resize(contours.size()); \t对(INT I = 0; I

1

openCV中有一个函数用于此; pointPolygonTest

+0

感谢Aidenhjj之间计算距离的快速回复的函数!我已经尝试了这个功能,它能够工作,但我需要知道从轮廓的每个点到质心的所有距离!相反,该函数只返回距离轮廓最近点的距离。 –

+0

所以只需获得每个点的x和y属性并减去中心x和y,然后使用好的旧毕达哥拉斯来找到距离。 – Aidenhjj

+0

这是重点!我已经在Matlab上完成了这个项目,在那里我使用了“古老的Pythagoras”:)事实是,我不知道如何获得x和y属性,因为这是我第一次使用C++/openCV编程! –