2017-04-20 269 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編程! –