Reconnaissance d'un cercle
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:
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 :)