7

我是openCV的新手,但我想创建虹膜识别程序。虽然带网络摄像头的系统可以检测到眼睛,但它不能检测到圆形的虹膜。我正在使用Hough Circle Transformation。但是如果图像中的虹膜不够圆,系统就无法检测到它。任何解决方案?OpenCV:使用Hough Circle转换来检测虹膜

所用的算法是Hough Circle Transformation。

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); 
+0

请重新格式化您的问题。你应该写一个可以理解的英语语句。 – Sam

+0

发布您的算法或代码将帮助您更多。 –

+0

您可以尝试跟踪眼睛边界并使用分割/形态学工具提取虹膜位置。如前所述,发布您的当前算法将有助于我们引导您。 – Eric

回答

6

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

有很多关于Stackoverflow的similar问题,我建议你use the search box

+0

谢谢,它的工作... –

+1

太棒了。点击答案附近的复选框将其选为您问题的正式答案。这样你就可以帮助未来的游客。 – karlphillip