我在python中打开视频文件时出错(opencv)

时间:2018-02-24 10:52:49

标签: python opencv image-processing

我正在使用python和opencv学习图像处理 我在python中编写这段代码

   import numpy as np
   import cv2
   vidCap=cv2.VideoCapture('output.avi')
   print('before while')
   while(vidCap.isOpened()):
       print('inside while')
       ret, frame=vidCap.read()
       gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
       cv2.imshow('frame',frame)
             if cv2.waitKey(1) & 0xFF==ord('q'):
                  break
print('outside while')
vidCap.release()
cv2.destroyWindow('LoadedVideo')

它给了我这个错误

    Traceback (most recent call last):
     File "D:\Python Image 
Processing\FirstExercise\PlayingVideoFromFile.py", line 12, in <module>
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
error: C:\builds\master_PackSlaveAddon-win32-vc12-
static\opencv\modules\imgproc\src\color.cpp:7456: error: (-215) scn == 3 || 
scn == 4 in function cv::ipp_cvtColor

1 个答案:

答案 0 :(得分:1)

代码正在将None作为frame传递给cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY),这会导致异常。

您应该检查vidCap.read()的返回值;如果它返回False作为元组中的第一项,则表示没有抓取框架,您不应该在其上调用cv2.cvtColor(),因为其值为None

即使在消耗了所有帧之后,

vidCap.isOpened()仍将继续返回True,因此不应将其用作while循环中的条件。循环可以写成:

if vidCap.isOpened():
    while True:     
        ret, frame = vidCap.read()
        if ret:
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            cv2.imshow('frame', frame)
            if (cv2.waitKey(1) & 0xFF) == ord('q'):
                break
        else:
            break
    vidCap.release()

现在,当没有更多帧要从文件中抓取或检测到'q'按键时,退出循环。