#include<cv.h> #include<highgui.h> int main() { IplImage* src = NULL; IplImage* dst = NULL; IplImage* color = NULL; src = cvLoadImage ("circle.jpg", 1); dst = cvCreateImage (cvGetSize(src), IPL_DEPTH_8U, 1); if (src->nChannels == 1) { dst = cvCloneImage (src); } else { cvCvtColor (src, dst, CV_RGB2GRAY); } CvMemStorage* storage = cvCreateMemStorage (0); cvSmooth (dst, dst, CV_GAUSSIAN, 5, 5); CvSeq* circles = cvHoughCircles (dst, storage, CV_HOUGH_GRADIENT, 2, dst->width / 3, 300, 100, 0, 200); color = cvCreateImage (cvGetSize(src), IPL_DEPTH_8U, 3); cvCvtColor (dst, color, CV_GRAY2RGB); for (int i = 0; i < circles->total; i++) { float* p = (float*)cvGetSeqElem (circles, i); CvPoint pt = cvPoint (cvRound(p[0]), cvRound(p[1])); cvCircle (color, pt, cvRound(p[2]), CV_RGB(255, 0, 0), 3, 8, 0); } cvNamedWindow ("src", 1); cvShowImage ("src", src); cvNamedWindow ("circle", 1); cvShowImage ("circle", color); cvWaitKey (0); cvReleaseMemStorage (&storage); cvReleaseImage (&src); cvReleaseImage (&dst); cvReleaseImage (&color); return 0; }
这是我的源代码,这个我测试了很久,调cvHoughCircles的参数也调了很久,但始终没有调到理想的结果,下面是我
调试中相对来说效果好点的结果: