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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
}
Autre petit problème je ne sais pas pourquoi lorsque je décommente la fonction "cvSmooth ()" mon application plante

Merci d'avance si vous avez une idée du pourquoi de ces 2 petits soucis