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

2024-06-06 06:04:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我成功地应用了haar级联来检测面部和眼睛 然后应用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()

Tags: inimgfornpcv2excascadeeye
1条回答
网友
1楼 · 发布于 2024-06-06 06:04:21

如果你希望Hough算法每次都能产生相同的结果,你就必须每次给它提供一个相似的图像。基本上你要做的就是对瞳孔的图像进行预处理,这样对于Hough来说,所有的瞳孔看起来几乎是一样的。看看Otsu的阈值化,自适应Thresholding和其他一些很酷的东西,比如模糊,反锐化掩蔽,clahe等等

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

另一个想法是完全放弃霍夫的想法。看看如何找到轮廓及其特征(link1link2)。不能说没有数据,但这绝对是一个可供选择的选择。在

相关问题 更多 >