我正在使用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
答案 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'
按键时,退出循环。