python opencv相机无法打开

问题描述

我用 python 运行了以下代码。但是没有视频显示屏幕。所以相机灯亮了,但视频屏幕不可见。

操作系统:Windows 10 x64 蟒蛇:3.9.1

来源 https://github.com/GangYuanFan/Closed-Eye-Detection-with-opencv/blob/master/cv_close_eye_detect.py

import cv2

eye_cascPath = 'haarcascade_eye_tree_eyeglasses.xml'
face_cascPath = 'haarcascade_frontalface_alt.xml'
faceCascade = cv2.CascadeClassifier(face_cascPath)
eyeCascade = cv2.CascadeClassifier(eye_cascPath)

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)


while 1:
    ret,img = cap.read()
    if ret:
        frame = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        # Detect faces in the image
        faces = faceCascade.detectMultiScale(
            frame,scaleFactor=1.1,minNeighbors=5,minSize=(30,30),# flags = cv2.CV_HAAR_SCALE_IMAGE
        )

        #print("Found {0} faces!".format(len(faces)))
        if len(faces) > 0:
            # Draw a rectangle around the faces
            for (x,y,w,h) in faces:
                cv2.rectangle(img,(x,y),(x + w,y + h),(0,255,0),2)
            frame_tmp = img[faces[0][1]:faces[0][1] + faces[0][3],faces[0][0]:faces[0][0] + faces[0][2]:1,:]
            frame = frame[faces[0][1]:faces[0][1] + faces[0][3],faces[0][0]:faces[0][0] + faces[0][2]:1]
            eyes = eyeCascade.detectMultiScale(
                frame,# flags = cv2.CV_HAAR_SCALE_IMAGE
            )
            if len(eyes) == 0:
                print('no eyes!!!')
            else:
                print('eyes!!!')
            frame_tmp = cv2.resize(frame_tmp,(400,400),interpolation=cv2.INTER_LINEAR)
            cv2.imshow('Face Recognition',frame_tmp)
        waitkey = cv2.waitKey(1)
        if waitkey == ord('q') or waitkey == ord('Q'):
            cv2.destroyAllWindows()
            break

解决方法

看起来您唯一的 cv2.imshow() 位于 if len(faces) > 0: 条件内,尝试将其置于 if ret: 条件中,然后您至少应该看到 cv2 相机窗口弹出。>