Bonjour,
Voila je me suis amusé à faire développé une petite fonction qui repère tout ce qui a une forme circulaire dans une image. Cela marche bien seulement, si il voit au moins un cercle il m'en dessine beaucoup même à des endroit ou il n'y en a pas, par contre si il ne voit pas de cercle il ne me dessine rien. Voici le petit bout de code :
Autre petit problème je ne sais pas pourquoi lorsque je décommente la fonction "cvSmooth ()" mon application plante :(Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 bool circle (IplImage* image) { IplImage* circle_image = cvCreateImage (cvGetSize (image), image->depth, 1); CvMemStorage* storage = cvCreateMemStorage (0); cvConvertImage(image, circle_image); //cvSmooth (circle_image, circle_image, CV_GAUSSIAN, 5, 5); CvSeq* results = cvHoughCircles (circle_image, storage, CV_HOUGH_GRADIENT, 2, image->width/10); if (results->total != 0) { for (int i=0;i<results->total;i++) { float* circles = (float*)cvGetSeqElem (results, i); CvPoint pt = cvPoint (cvRound (circles[0]), cvRound (circles[1])); cvCircle (circle_image, pt, cvRound (circles[2]), CV_RGB (0, 0, 0)); } cvClearSeq (results); cvClearMemStorage( storage ); cvShowImage ("img circle", circle_image); return true; } else { cvClearSeq (results); cvClearMemStorage (storage); } return false; }
Merci d'avance si vous avez une idée du pourquoi de ces 2 petits soucis :)
