Dans un autre article, nous avons appris comment extraire les composants connectés en utilisant OpenCV et comment des opérations ordinaires. Maintenant, je vais vous parler une autre tâche utile et commun: le filtrage des composants connectés à extraire uniquement ceux qui passent à certains critères. Et pour rendre les choses plus générique, les critères seront définis par l'appelant à l'aide des pointeurs de fonction.
Revisiter OpenCVOpenCV est une bibliothèque de traitement de la vision par ordinateur et l'image cool qui est largement utilisée et offre de nombreuses bonnes caractéristiques. Nous allons l'utiliser pour extraire et filtrer les composants connectés à partir d'une image. Revisiter l'extraction de composants Connected nous pouvons extraire les composants connectés d'une image en utilisant la fonction cvFindContours comme décrit ici. Il stocke les contours des composantes connexes dans une liste de séquences.
Chaque séquence contient des points d'un polygone qui se rapproche de ce contour et on peut naviguer de cette liste de séquences en utilisant les h_next, h_prev, v_next et v_prev pointeurs. CvSeq: séquences de type OpenCV Le CvSeq est une séquence dans OpenCV et il est utilisé pour stocker les contours des composantes connexes. Puisque nous allons filtrer les composants connectés, donc nous devons trouver une façon de supprimer un contour de la liste. La fonction de cvSeqRemove supprime des éléments d'une séquence, mais il ne supprime pas une séquence entière de notre liste de contour.
Pour supprimer une séquence de la liste que nous devons jouer avec les h_next et h_prev pointeurs. Si nous voulons supprimer le premier élément que nous avons juste besoin de faire le point contours de pointeur pour le deuxième élément. Pour supprimer un élément dans le milieu de la liste que nous «sauter» lui de la séquence. La procédure est simple et intelligent: si nous voulons supprimer le X élément nous faisons le pointeur de la h_next du point d'élément précédent à l'un après X et h_prev du prochain point d'élément à l'élément avant de X . Juste comme ceci: Bien sûr, nous devons vérifier si X a quelqu'un après lui, donc nous ne pas courir dans certains erreurs de segmentation enlever le dernier élément. Définition d'une fonction de critères personnalisés en utilisant des ptr-> h_prev-> h_next = ptr-> h_next; si (ptr-> h_next! = NULL) ptr-> h_next-> h_prev = ptr-> h_prev;
OpenCV Tutorial