无法在open cv和python中使用hough圆检测瞳孔

无法在open cv和python中使用hough圆检测瞳孔,python,opencv,iris-recognition,Python,Opencv,Iris Recognition,我的项目是提取失踪人员虹膜的不变特征,并将其与找到的人进行比较,以找到匹配项 我成功地应用了haar cascade来检测人脸和眼睛 然后应用smooth()和canny()去除噪声和边缘检测 现在我用hough圆检测瞳孔和瞳孔中心,即虹膜位置。。我必须为每幅图像调整hough圆的参数,以便它检测瞳孔。我不知道如何获得中心并继续提取虹膜的不变特征。。请帮忙 这是我的密码 import numpy as np import cv2 face_cascade =cv2.CascadeClassifi

我的项目是提取失踪人员虹膜的不变特征,并将其与找到的人进行比较,以找到匹配项

我成功地应用了haar cascade来检测人脸和眼睛 然后应用smooth()和canny()去除噪声和边缘检测

现在我用hough圆检测瞳孔和瞳孔中心,即虹膜位置。。我必须为每幅图像调整hough圆的参数,以便它检测瞳孔。我不知道如何获得中心并继续提取虹膜的不变特征。。请帮忙

这是我的密码

import numpy as np
import cv2
face_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml')
img = cv2.imread('sheikha.jpg',0)
img = cv2.bilateralFilter(img, 5, 175, 175) 
edges = cv2.Canny(img, 100, 100)
faces = face_cascade.detectMultiScale(
        img, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))
print "Detected %d faces." % len(faces)
print "Drawing rectangles..."
for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (0,255,0), 2)
        eyes = eye_cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=5,minSize=(10,10))
        for (ex,ey,ew,eh) in eyes :
            #if neye < 3:
            imgCrop = edges[ey:ey+eh,ex:ex+ew]           
            circles = cv2.HoughCircles(imgCrop,cv2.cv.CV_HOUGH_GRADIENT,1,60,param1=90,param2=10,minRadius=10,maxRadius=20) 
            circles = np.uint16(np.around(circles))
            for i in circles[0,:]:
                cv2.circle(imgCrop,(i[0],i[1]),i[2],(255,255,0),2)

print "Drawn Rectangles."
#cv2.imshow('edge',edges)
cv2.imshow('image',imgCrop)
cv2.waitKey(0)
cv2.destroyAllWindows()
将numpy导入为np
进口cv2
face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml'))
eye\u cascade=cv2.CascadeClassifier('haarcascade\u eye\u tree\u eyegories.xml'))
img=cv2.imread('sheikha.jpg',0)
img=cv2。双边滤波器(img,5175175)
边缘=cv2.Canny(img,100100)
面=面\级联。检测多尺度(
img,scaleFactor=1.3,minNeighbors=5,minSize=(30,30))
打印“检测到%d个面”。%len(面)
打印“绘制矩形…”
对于面中的(x,y,w,h):
cv2.矩形(img,(x,y),(x+w,y+h),(0255,0),2)
眼睛=眼睛\级联检测多尺度(img,scaleFactor=1.3,minNeighbors=5,minSize=(10,10))
对于眼睛中的(ex,ey,ew,eh):
#如果neye<3:
imgCrop=边[ey:ey+eh,ex:ex+ew]
圆=cv2.霍夫圆(imgCrop,cv2.cv.cv_-HOUGH_梯度,1,60,参数1=90,参数2=10,最小半径=10,最大半径=20)
圆=np.uint16(np.around(圆))
对于圆[0,:]中的i:
cv2.圆(imgCrop,(i[0],i[1]),i[2],(255255,0),2)
打印“绘制的矩形”
#cv2.imshow(“边缘”,边缘)
cv2.imshow(“图像”,imgCrop)
cv2.等待键(0)
cv2.destroyAllWindows()

如果希望Hough算法每次都产生相同的结果,那么每次都必须向它提供一个类似的图像。基本上你要做的是预处理瞳孔的图像,这样对于Hough来说,所有的瞳孔看起来几乎相同。查看大津的阈值化、自适应阈值化以及所有相关的酷东西,比如模糊、去锐化掩蔽、clahe等等

记住在预处理的每一步都要控制图像和代码——它很容易失控和混乱。视觉上比较图像,寻找清晰的(理想情况下没有噪声和其他圆圈)瞳孔的类似二值图像,以了解Hough是否会看到几乎相同的图像,从而检测具有相同参数的圆圈


另一个想法是完全放弃霍夫的想法。查看查找轮廓及其特征(;)。不能说没有数据,但这绝对是一个值得注意的替代方案。

图像在哪里使用?实际上,这只是我项目的一部分。如果它正常运行,我将结合项目的主要代码。。因此,该代码必须适用于不同的图片。。图片取决于上传图片的用户。。我上传的代码仅用于图片。。当我给另一张图片时,它并没有检测到瞳孔,这是我的问题,一些样本图片会help@JeruLuke对于一个图像圆=cv2.HoughCircles(imgCrop,cv2.cv.cv_-HOUGH_渐变,1,60,参数1=90,参数2=10,最小半径=10,最大半径=20)检测瞳孔,这对任何其他图像都不起作用图片取决于上传它的用户。。ie图片可以彼此不同