Pourquoi FindContours fonctionne-t-il dans l’opencv pour trouver deux contours au lieu d’un dans une image comme ci-dessous?

Image d’entrée – http://soffr.miximages.com/c/sLoqh.png Image de sortie avec shell convexe des contours dessinés – http://soffr.miximages.com/c/AaNJY.png

Aussi toute aide sur la façon d’obtenir un contour sera très appréciée?

L’astuce pour récupérer l’image en tant que contour semble traiter l’image avec Canny avant d’exécuter cvFindContours .

 IplImage* src = cvLoadImage(argv[1], CV_LOAD_IMAGE_GRAYSCALE); IplImage* cc_img = cvCreateImage( cvGetSize(src), src->depth, 3 ); cvSetZero(cc_img); CvScalar(ext_color); CvMemStorage *mem; mem = cvCreateMemStorage(0); CvSeq *contours = 0; // edges returned by Canny might have small gaps between them, which causes some problems during contour detection // Simplest way to solve this s to "dilate" the image. cvCanny(src, src, 10, 50, 3); cvShowImage("Tutorial", src); cvWaitKey(0); int n = cvFindContours( src, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0)); CvSeq* ptr = 0; for (ptr = contours; ptr != NULL; ptr = ptr->h_next) { ext_color = CV_RGB( rand()&255, rand()&255, rand()&255 ); //randomly coloring different contours cvDrawContours(cc_img, ptr, ext_color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0)); } cvNamedWindow("Tutorial"); cvShowImage("Tutorial", cc_img); //cvSaveImage("out.png", cc_img); cvWaitKey(0); 

Les sorties:

entrez la description de l'image ici