Le prototype de la fonction de critères sera: critères de int (de CvSeq * de contour); Coding l'exemple: le filtrage et l'extraction des composantes connexes Maintenant, nous allons coder la fonction qui va faire le travail . Je vais poster le code de la fonction ci-dessous ici, le code de travail complet est disponible à la fin de l'article. CvSeq * contours, * ptr; CvMemStorage * mem = cvCreateMemStorage (0); cvFindContours (img, MEM, et contours, sizeof (CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint (0,0)); ptr = contours; while (ptr! = NULL) {if (critères (PTR) == 0) {if (PTR == contours) {contours = ptr-> h_next; ptr = contours; ptr-> h_prev = NULL; } Else {ptr-> h_prev-> h_next = ptr-> h_next; si (ptr-> h_next! = NULL) ptr-> h_next-> h_prev = ptr-> h_prev; ptr = ptr-> h_next; }} Else {ptr = ptr-> h_next; }} retourner contours; } Un exemple d'utilisation Dans cet exemple, je vais vous montrer une fonction simple qui filtre les composants en fonction de leur rapport , se uniquement les composants qui sont presque carré connecté. Nous appelons la fonction extract_and_filter_CC comme ceci: filtered_cc = extract_and_filter_CC (img, carré); Conclusion Cet article décrit un autre application des composantes connexes: pour filtrer les parties de l'image qui ne correspond pas à certains critères. Il utilise également des pointeurs de fonction pour rendre le filtrage aussi générique que possible. Cette technique est très puissante et peut être utilisée conjointement à d'autres techniques pour éliminer le bruit d'une image ou d'extraire especial parties de l'image. Le code de travail complet avec des commentaires est disponible ici. CvSeq * extract_and_filter_CC (IplImage * img, int (* critères ) (CvSeq *)) {
int carré (CvSeq * contour) {case CvRect = cvBoundingBox (contour); si (box-> w /box-> hw /box-> h> 0,4) return 1; return 0;}
OpenCV Tutorial