代码之家  ›  专栏  ›  技术社区  ›  Shideh

OpenCV 3.0 Beta-Python-通过网络摄像头进行人脸检测-代码给我错误

  •  0
  • Shideh  · 技术社区  · 9 年前

    我多次编写并查看了这段代码,特别是它非常简单和直接(摘自opencv教程),但它仍然给我一个错误。我已经检查了错误,我知道它缺少通道,但是,我不知道如何修复它。如果有任何帮助,将不胜感激。我使用Windows x64和Spyder(来自Anaconda发行版)作为IDE。这可能是硬件问题吗?(网络摄像头)

        #####################################################
        #               Face Detection (Video)              # 
        #####################################################
    
        import numpy as np
        import cv2
    
        face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
        eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
    
        video = cv2.VideoCapture(0)
        ret, frame = video.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
        for (x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
            roi_gray = gray[y:y+h, x:x+w]
            roi_color = frame[y:y+h, x:x+w]
            eyes = eye_cascade.detectMultiScale(roi_gray)
            for (ex,ey,ew,eh) in eyes:
                cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
    
    
            cv2.imshow('Video', frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    
        video.release()
        cv2.destroyAllWindows()
    

    下面是我得到的错误:

    error: ..\..\..\..\opencv\modules\imgproc\src\color.cpp:5731:
    error: (-215)    scn == 3 || scn == 4 in function cv::cvtColor
    
    1 回复  |  直到 9 年前
        1
  •  4
  •   berak    9 年前

    我想,你想要的是“连续检测”,而不是“单次检测”,对吧?

    你只需要一些小变化:

    import numpy as np
    import cv2
    
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    if face_cascade.empty(): raise Exception("your face_cascade is empty. are you sure, the path is correct ?")
    
    eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
    if eye_cascade.empty(): raise Exception("your eye_cascade is empty. are you sure, the path is correct ?")
    
    video = cv2.VideoCapture(0)
    while(video.isOpened()):
        ret, frame = video.read()
        if frame not None:
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            faces = face_cascade.detectMultiScale(gray, 1.3, 5)
            for (x,y,w,h) in faces:
                cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
                roi_gray = gray[y:y+h, x:x+w]
                roi_color = frame[y:y+h, x:x+w]
                eyes = eye_cascade.detectMultiScale(roi_gray)
                for (ex,ey,ew,eh) in eyes:
                    cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
            cv2.imshow('Video', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    video.release()
    cv2.destroyAllWindows()