Trouver les Contours dans OpenCV?
Lorsque vous récupérez des contours d'une image, vous devez obtenir 2 contours par blob - l'une intérieure et une extérieure. Considérons le cercle ci-dessous - depuis le cercle est une ligne avec un pixel de largeur plus grande que un, vous devriez être capable de trouver deux contours dans l'image de la partie intérieure du cercle et celui de la partie externe.
À l'aide d'OpenCV, je veux récupérer les contours INTÉRIEURS. Cependant, lorsque j'utilise findContours (), je ne semble pas être d'obtenir le contour extérieur. Comment pourrais-je récupérer les contours intérieurs d'une goutte à l'aide d'OpenCV?
Je suis à l'aide de l'API C++, pas du C donc suggérer uniquement des fonctions que l'utilisation de l'API C++. (c'est à dire findContours () plutôt que cvFindContours ())
Grâce.
Eh bien, je n'ai pas vraiment un code unique. J'ai juste un Tapis je l'ai récupérer à partir de l'appareil photo. J'ai exécuter le savant détecteur de bord sur elle, et puis de trouver les contours à l'aide des findContours (). Tous les contours trouvés sont stockés dans un vector<vector<Point> >. C'est essentiellement tout ce que j'ai donc il n'y a pas beaucoup de point en moi de poster le code réel - c'est juste le processus traditionnel de trouver les contours.
J'ai travaillé un peu avec les contours, mais mon intérêt n'était que le contour extérieur. J'ai essayé colororing un contour, avec " drawContours()'. Qui exspects une sorte de hiérarchie. L'échantillon sur " drawContours()' que j'ai utilisé, n'a pas la couleur des contours intérieurs. Ce que j'essaie de faire ici, c'est que vous avez probablement besoin d'utiliser la hiérarchie de tableau à partir d' 'findContours()' pour les trier. (La raison pour laquelle je ne poste pas une réponse, c'est que ma connaissance de cette hiérarchie est limité, je ne voudrais pas vous tromper sur la question. J'ai fait un peu de tests sur ces et j'ai pu expliquer ma compréhension jusqu'à présent, si vous le demandez.)
Merci de répondre. Si possible, je vous serais reconnaissant si vous pouviez expliquer votre compréhension des hiérarchies jusqu'à présent. Merci.
interne et externe de délimitation des contours peut être consulté à l'aide de la h_next et v_next des pointeurs dans le CvSeq* structure où les contours sont stockées par le findContours() fonction. Voici un lien à partir du livre au sujet de la façon dont c'est organisé (j'ai toujours collaboré avec juste les contours externes, donc il n'y a pas de travail code pour l'afficher): les livres.google.co.dans/...
OriginalL'auteur fdh | 2011-12-09
Vous devez vous connecter pour publier un commentaire.
J'ai couru ce code sur votre image et il a renvoyé une intérieure et extérieure de contour.
Voici les contours trouvées:
Si vous réglez le mode de
CV_RETR_TREE
au lieu deCV_RETR_LIST
vous obtenez une arborescence hiérarchique des contours de sorte que le contour intérieur serait en-dessous du contour extérieur. Il ne fait pas de distinction de l'intérieur vs extérieur contours donc si il y avait un cercle à l'intérieur du cercle, à la fois de ces contours serait en-dessous du contour intérieur du cercle extérieur. La OpenCV findContour tutoriel utiliseCV_RETR_TREE
.mise à Jour du lien pour OpenCV findContours tutoriel
OriginalL'auteur SSteve
Je pense que ce Farhad se pose est de recadrer le contour de l'image d'origine.
Pour cela, vous aurez besoin de trouver le contour comme expliqué ci-dessus, puis utiliser un masque pour obtenir l'intérieur de l'original, et puis de recadrer le résultat en une image à la même taille que le contour.
OriginalL'auteur Kacem Boufelliga
La findcontours fonction stocke tous les contours de différents vecteurs, dans le code donné tous les contours sont dessinés, il vous suffit de dessiner le contour correspondant à l'intérieur, idx est la variable que les états dont le contour est dessiné.
OriginalL'auteur Dangelo Guanipa