C++ OpenCV:利用Hough圆变换检测虹膜

C++ OpenCV:利用Hough圆变换检测虹膜,c++,opencv,image-processing,hough-transform,iris-recognition,C++,Opencv,Image Processing,Hough Transform,Iris Recognition,我是openCV的新手,但我想创建虹膜识别程序。虽然带有网络摄像头的系统可以检测眼睛,但它无法检测圆形虹膜。我使用的是霍夫圆变换。但若图像中的虹膜不够圆,系统就无法检测到它。有什么解决办法吗 使用的算法是Hough圆变换 IplImage *capturedImg = cvLoadImage("circle.jpg",1); IplImage *grayscaleImg = cvCreateImage(cvGetSize(capturedImg), 8, 1); cvCvtColor(capt

我是openCV的新手,但我想创建虹膜识别程序。虽然带有网络摄像头的系统可以检测眼睛,但它无法检测圆形虹膜。我使用的是霍夫圆变换。但若图像中的虹膜不够圆,系统就无法检测到它。有什么解决办法吗

使用的算法是Hough圆变换

IplImage *capturedImg = cvLoadImage("circle.jpg",1);
IplImage *grayscaleImg = cvCreateImage(cvGetSize(capturedImg), 8, 1);

cvCvtColor(capturedImg, grayscaleImg, CV_BGR2GRAY);

// Gaussian filter for less noise
cvSmooth(grayscaleImg, grayscaleImg, CV_GAUSSIAN,9, 9 );

//Detect the circles in the image
CvSeq* circles = cvHoughCircles(grayscaleImg,
                         storage,
                         CV_HOUGH_GRADIENT,
                         2,
                         grayscaleImg->height/4,
                         200,
                     100 );

for (i = 0; i < circles->total; i++) 
{
     float* p = (float*)cvGetSeqElem( circles, i );
     cvCircle( capturedImg, cvPoint(cvRound(p[0]),cvRound(p[1])), 
        3, CV_RGB(0,255,0), -1, 8, 0 );
     cvCircle( capturedImg, cvPoint(cvRound(p[0]),cvRound(p[1])), 
         cvRound(p[2]), CV_RGB(0,0,255), 3, 8, 0 );
}
// cvCircle( img,cvPoint( r->x, r->y ),67, CV_RGB(255,0,0), 3, 8, 0 );      
cvNamedWindow( "circles", 1 );
cvShowImage( "circles", capturedImg );
IplImage*capturedImg=cvLoadImage(“circle.jpg”,1);
IplImage*grayscaleImg=cvCreateImage(cvGetSize(capturedImg),8,1);
CVT颜色(capturedImg、灰度、CV_bgr2灰色);
//低噪声高斯滤波器
cvSmooth(灰度图,灰度图,CV_高斯图,9,9);
//检测图像中的圆
CvSeq*圆=cvHoughCircles(灰度),
存储
CV_HOUGH_梯度,
2.
灰度图->高度/4,
200,
100 );
对于(i=0;itotal;i++)
{
float*p=(float*)cvGetSeqElem(圆,i);
cvCircle(capturedImg、cvPoint(cvRound(p[0])、cvRound(p[1])),
3,CV_RGB(0255,0),-1,8,0);
cvCircle(capturedImg、cvPoint(cvRound(p[0])、cvRound(p[1])),
cvRound(p[2]),CV_RGB(0,0255),3,8,0;
}
//cvCircle(img,cvPoint(r->x,r->y),67,CV_RGB(255,0,0),3,8,0);
cvNamedWindow(“圆圈”,1);
cvShowImage(“圆圈”,capturedImg);

cvSmooth()
cvHoughCircles()之间添加对
cvCanny()
的调用。这将执行一个边缘检测算法,该算法将为
cvHoughCircles()
提供更好的输入图像,并且可能会改善结果


关于Stackoverflow有很多问题,我建议您。

请重新格式化您的问题。你应该写一篇易懂的英语声明。发布你的算法或代码会对你有更多帮助。你可以尝试跟踪眼睛边界,并使用分割/形态学工具提取虹膜位置。如前所述,发布您当前的算法将有助于我们指导您。除了Hough Circle,还有其他算法可用于检测虹膜吗?太好了。单击答案旁边的复选框,将其选择为问题的正式答案。这样你就帮助了未来的访客。