【发布时间】:2014-08-05 21:51:26
【问题描述】:
我正在尝试检测矩形内的一对眼睛,如果使用 OpenCV 2.4.x Python 检测到人脸,就会出现这种眼睛。这是我的代码:
FACE_DETECT = "lbpcascade_frontalface.xml"
EYE_DETECT = "haarcascade_eye.xml"
DOWNSCALE = 4
webcam = cv2.VideoCapture(0)
face_classifier = cv2.CascadeClassifier(FACE_DETECT)
eye_classifier = cv2.CascadeClassifier(EYE_DETECT)
if webcam.isOpened(): # try to get the first frame
rval, frame = webcam.read()
else:
rval = False
while rval:
minisize = (frame.shape[1] / DOWNSCALE,frame.shape[0] / DOWNSCALE)
miniframe = cv2.resize(frame, minisize)
faces = face_classifier.detectMultiScale(miniframe)
eyes = eye_classifier.detectMultiScale(miniframe)
for f in faces:
fx, fy, fw, fh = [fv * DOWNSCALE for fv in f]
cv2.rectangle(frame, (fx, fy), (fx + fw, fy + fh), (0, 0, 255))
for (ex,ey, ew, eh) in eyes:
cv2.rectangle(frame, (ex,ey), ((ex+ew), (ey+eh)), (50, 50, 50), 3)
cv2.imshow('eyes = %s' % (eyes,), frame)
cv2.imshow("cam", frame)
rval, frame = webcam.read()
key = cv2.waitKey(20)
if key in [27, ord('Q'), ord('q')]: # exit on ESC
break
我的面部检测代码在这个代码中有效,但眼睛检测部分不起作用(我只是包含了面部检测代码,以防它可能有用)。我在眼睛的循环序列中添加了一些 print() 语句:
for (ex,ey, ew, eh) in eyes:
cv2.rectangle(frame, (ex,ey), ((ex+ew), (ey+eh)), (50, 50, 50), 3)
cv2.imshow('eyes = %s' % (eyes,), frame)
但是,没有输出出现。
如果人脸检测有效,那么眼睛检测应该有效,或者至少进入眼睛循环。我可能想到了一个错误的算法。如何检测眼睛?
任何帮助将不胜感激。 :)
【问题讨论】: