下面这个代码是借鉴别人调用摄像头进行人脸检测的
然而竟然报错
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp
查阅资料
发现是分类器路径问题
如果用\在python中有转义作用
可以在前面加入r 取消转义
或者把\改成/
完美解决

import cv2


def CatchVideo(window_name, camera_idx):
    cv2.namedWindow(window_name)

    #视频来源,可以选择摄像头或者视频
    cap = cv2.VideoCapture(0)

    #使用人脸识别分类器(这里填你自己的OpenCV级联分类器地址)
    classfier = cv2.CascadeClassifier(r"D:\Anacon\envs\tensorflow\Lib\site-packages\cv2\data\haarcascade_frontalface_alt2.xml")

    #识别出人脸后要画的边框的颜色,RGB格式
    color = (0, 255, 0)

    while cap.isOpened():
        ok, frame = cap.read() #读取一帧数据
        if not ok:
            break

        #将当前帧转换成灰度图像
        grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        #人脸检测,1.2和3分别为图片缩放比例和需要检测的有效点数,32*32为最小检测的图像像素
        faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
        if len(faceRects) > 0:            #大于0则检测到人脸
            for faceRect in faceRects:  #框出每一张人脸
                x, y, w, h = faceRect
                cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)

        #显示图像
        cv2.imshow(window_name, frame)
        c = cv2.waitKey(10)
        if c & 0xFF == ord('q'):  #按q退出
            break

    #释放摄像头并销毁所有窗口
    cap.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    CatchVideo("Camera", 0)

更多推荐