2010-11-30 32 views
2

J'ai un CvSeq * contenant les polygones créés en exécutant cvApproxPoly() sur un CvSeq * créé en exécutant cvFindContors sur une image d'entrée b & w. Je veux accéder aux CvPoints de chaque polygone renvoyé par le CvSeq *. Code à ce jour comme suit (décrit est un IplImage contenant le b & w image d'entrée):Récupération de points de polygones créés par cvApproxPoly()

//create pointers to store data we're going to be calculating 
CvMemStorage* storage = cvCreateMemStorage(); 
CvSeq* first_contour = NULL; 
CvSeq* first_polygon = NULL; 

//find the contours (edges) of the silhouette, in terms of pixels. 
cvFindContours(&outlines, 
       storage, 
       &first_contour, 
       sizeof(CvContour), 
       CV_RETR_LIST); 

//convert the pixel contours to line segments in a polygon. 
first_polygon = cvApproxPoly(first_contour, 
          sizeof(CvContour), 
          storage, 
          CV_POLY_APPROX_DP, 
          2, 
          1); 

I peut utiliser cvDrawContour pour dessiner le polygone sur une image, mais je veux itérer sur chaque point 2D qui définit chaque contour. Il semble que chaque élément du CvSeq * first_polygon contienne l'ensemble des points pour un seul polygone (conclu sur la base de la valeur de first_polygon-> total ;, mais je ne sais pas comment accéder aux points individuels.) Aidez-nous s'il vous plaît?

Répondre

5

vous pouvez utiliser cvGetSeqElem itérer sur les sommets du polygone. squares.c dans des échantillons/c a mis en œuvre cette chose.

+0

pouvez-vous s'il vous plaît dire si cette méthode disponible en javacv aussi? –

3

Résolu moi-même: CvSeq * est multi-dimensionnel, par exemple: cvSeq-> total; est la première dimension (chaque polygone), par exemple cvSeq-> first-> total est la deuxième dimension (chaque point d'un polygone)