使用cvHoughCircles进行圆检测

来源:互联网 发布:整型数据-1 编辑:程序博客网 时间:2024/05/04 14:34
#include <cv.h>#include <highgui.h>#include <math.h>#include <iostream.h>int main(int argc, char** argv){    IplImage* img;    if( argc == 2 && (img=cvLoadImage(argv[1], 1))!= 0)    {        IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 );        CvMemStorage* storage = cvCreateMemStorage(0);        cvCvtColor( img, gray, CV_BGR2GRAY );        cvSmooth( gray, gray, CV_GAUSSIAN, 9, 9 ); // smooth it, otherwise a lot of false circles may be detected        CvSeq* circles = cvHoughCircles( gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100 );        int i;        for( i = 0; i < circles->total; i++ )        {             float* p = (float*)cvGetSeqElem( circles, i );             cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 );             cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 );         cout<<"圆心坐标x= "<<cvRound(p[0])<<endl<<"圆心坐标y= "<<cvRound(p[1])<<endl;            cout<<"半径="<<cvRound(p[2])<<endl;         }      cout<<"圆数量="<<circles->total<<endl;        cvNamedWindow( "circles", 1 );        cvShowImage( "circles", img );        cvWaitKey(0);    }    return 0;}


原创粉丝点击