picamera与python一起使用opencv cv2.CVT颜色错误scn==3 | | scn==4

picamera与python一起使用opencv cv2.CVT颜色错误scn==3 | | scn==4,python,opencv,raspberry-pi,Python,Opencv,Raspberry Pi,我在opencv中使用raspberry pi摄像头和python。摄像头是否不工作? 下面是我的代码片段: import cv2 import numpy as np import picamera face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade=cv2.CascadeClassifier('haarcascade_eye.xml') cap=cv2.VideoCa

我在opencv中使用raspberry pi摄像头和python。摄像头是否不工作? 下面是我的代码片段:

import cv2
import numpy as np
import picamera 
face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

eye_cascade=cv2.CascadeClassifier('haarcascade_eye.xml')

cap=cv2.VideoCapture(0)

while True:
    ret, img=cap.read()
    gray= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces= face_cascade.detectMultiScale(gray, 1.3, 5)
    for(x,y,w,h) in faces:
        cv2.rectangle(img, (x,y),(x+w, y+h), (255,0,0), 2)
        roi_gray= gray[y:y+h ,x:x+w]
        roi_color= imb[y:y+h ,x:x+w]
        eyes= eye_cascade.detectMultiScale(roi_gray)
        for(ex, ey, ew, eh) in eyes:
            cv2.recangle(roi_color, (ex,ey), (ex+ew,ey+eh), (0,255,0),2)

    cv2.imshow('img',img)
    k=cv2.waitKey(30)  &0xff
    if k==27:
        break

cap.release()
cv2.destroyAllWindows()
它返回:

Traceback (most recent call last):
File "/home/pi/face eye detect.py", line 12, in <module>
gray= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
error: /build/opencv-U1UwfN/opencv-2.4.9.1+dfsg1/modules/imgproc/src/color.cpp:3737: error: (-215) scn == 3 || scn == 4 in function cvtColor

您可以先检查返回的帧是否为空,然后再尝试检查是否需要一点时间才能打开相机并发送完整的有效帧?:

if img is not None
e、 g

值得一看。 请记住,您可以使用设置相机以检索图像,而不是RGB。原因是,您可以简单地直接检索Y通道亮度,而无需将RGB转换为灰度,从而节省处理能力以获得更好的效果

此外,如果精度不是关键,但速度是关键,那么您可能希望研究HAAR级联而不是HAAR级联


这些只是一些提示,先从最舒适的开始,然后再在上面构建。

如果您先检查img是否为空,会发生什么情况?对不起,先生,您能告诉我如何检查它吗,顺便说一下,我是初学者,我关注下面的视频,我认为它不会生成任何文件@GeorgeProfenza在while循环中的意思,如果img='None':打印'Image not found'。这将让您知道图像是否被实际捕获。我已经在下面发布了详细信息,请记住,您不想检查字符串“None”与“None”不同
import cv2
import numpy as np
import picamera 
face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

eye_cascade=cv2.CascadeClassifier('haarcascade_eye.xml')

cap=cv2.VideoCapture(0)

while True:
    ret, img=cap.read()
    if img is not None:
        gray= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces= face_cascade.detectMultiScale(gray, 1.3, 5)
        for(x,y,w,h) in faces:
            cv2.rectangle(img, (x,y),(x+w, y+h), (255,0,0), 2)
            roi_gray= gray[y:y+h ,x:x+w]
            roi_color= imb[y:y+h ,x:x+w]
            eyes= eye_cascade.detectMultiScale(roi_gray)
            for(ex, ey, ew, eh) in eyes:
                cv2.recangle(roi_color, (ex,ey), (ex+ew,ey+eh), (0,255,0),2)

        cv2.imshow('img',img)
    else:
        print 'empty camera frame, skipping processing'
    k=cv2.waitKey(30)  &0xff
    if k==27:
        break

cap.release()
cv2.destroyAllWindows()