为什么OpenCV在Python中不能检测到Haar级联的眼睛?

2024-09-26 17:37:34 发布

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

我正在尝试检测一对眼睛在一个长方形内,如果用opencv2.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()语句:

^{pr2}$

但是,没有输出。
如果面部检测有效,那么眼睛检测应该起作用,或者至少进入眼圈。我可能想到了一个错误的算法。怎样才能发现眼睛?在

任何帮助都将不胜感激。:)


Tags: 代码inforcv2frame眼睛fxeye
1条回答
网友
1楼 · 发布于 2024-09-26 17:37:34

你要做的是搜索脸部的眼睛,而不是整个图像 你可以通过裁剪图像并只获得脸部,然后尝试在该图像中找到眼睛

sub_face = miniframe[fy:fy+fh, fx:fx+fw]
eyes = eye_classifier.detectMultiScale(sub_frame)
for (ex,ey, ew, eh) in eyes:
    cv2.rectangle(frame, (fx+ex,fy+ey), ((fx+ex+ew), (fy+ey+eh)), (50, 50, 50), 3)

相关问题 更多 >

    热门问题