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;
} |
Partager