面部识别opencv

时间:2017-06-25 15:12:36

标签: python opencv

我正在尝试使用opencv和python实现面部识别。 而不是从网络摄像头识别脸,我想识别视频中的脸。 我使用此代码从网络摄像头识别,它的工作原理。但当我改变代码以从视频中读取时,我得到一个错误。

webcam = cv2.VideoCapture(0)
time.sleep(2)

while True:
    (_, im) = webcam.read()
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

webcam = cv2.VideoCapture('man.avi')
time.sleep(2)

while True:
    (_, im) = webcam.read()
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

要阅读视频,我使用了:

webcam = cv2.VideoCapture('man.avi')

我收到此错误:

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-6-09b5782a88bc> in <module>()
     38 while True:
     39     (_, im) = webcam.read()
---> 40     gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
     41 
     42     faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    Error: ..\..\..\..\opencv\modules\imgproc\src\color.cpp:3739: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor

有关解决问题的任何建议吗?

1 个答案:

答案 0 :(得分:0)

你的问题是什么时候

webcam = cv2.VideoCapture('man.avi')

以下

while True:
    (_, im) = webcam.read()
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

将读取视频结尾,甚至通过。在那里,im为空np.array因此,cvtColor将失败并给出您看到的错误。检查此条件将消除错误,例如

while True:
    (ret, im) = webcam.read()

    # end of video, break the loop
    if not ret:
        break

    # valid frame
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)