2017-04-20 5 views
1

Je créerais une matrice qui a dans la colonne [i] les distances d'un Point Fixe (centre de masse (mc (i)) d'un contour) aux Points du contour [je].Trouver la distance du contour à un Point opencv C++

C'est le code où je trouve des contours et des centres de masse:

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

Ce code fonctionne bien.

Ensuite, j'ai essayé plusieurs façons de trouver la distance, mais j'ai eu beaucoup de problèmes car je suis en train de programmer en C++ et d'utiliser OpenCV.

Répondre

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

Une fonction pour calculer la distance entre 2 points

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

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

    return d; 
} 
+1

Merci Ibrahim !! Votre conseil a été utile, j'ai résolu le problème de cette façon: 'vector mc (contours.size()); \t raggio.resize (contours.size()); \t for (int i = 0; i

1

Il existe une fonction dans openCV pour cela; pointPolygonTest.

+0

Merci Aidenhjj pour la réponse rapide! J'ai essayé cette fonction et cela fonctionne, mais j'ai besoin de connaître toutes les distances de chaque point du contour au centre de masse! Au lieu de cela, cette fonction renvoie uniquement la distance par rapport au point le plus proche du contour. –

+0

alors récupérez simplement les propriétés x et y de chaque point et soustrayez le centre x et y, puis utilisez le bon vieux Pythagore pour trouver la distance. – Aidenhjj

+0

C'est le point! J'ai déjà fait ce projet sur Matlab et là j'ai utilisé le "bon vieux Pythagore" :) Le fait est que je ne sais pas comment obtenir les propriétés x et y car c'est la première fois que je programme en C++/openCV! –