原文链接:http://www.juzicode.com/python-error-opencv-videocapture-assertion-size-width-size-height/
错误提示:
VideoCapture从视频文件读取并显示时报错error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘cv::imshow’
import cv2
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
cap = cv2.VideoCapture('..\\vtest.avi')
while cap.isOpened():
ret, img = cap.read()
cv2.imshow('vedio', img)
key = cv2.waitKey(20)
cv2.destroyAllWindows()
cap.release()
==========运行结果:
VX公众号: 桔子code / juzicode.com
cv2.__version__: 4.5.2
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-2-93a5285e82d1> in <module>
5 while cap.isOpened():
6 ret, img = cap.read()
----> 7 cv2.imshow('vedio', img)
8 #检查按键
9 key = cv2.waitKey(20)
error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-kuwfz3h3\opencv\modules\highgui\src\window.cpp:404: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
错误原因:
1、视频文件读取后使用imshow显示前需要判断文件是否读完,如果已经读完最后一帧,再继续读时获取的是None,所以提示imshow错误。
解决方法:
1、在read()方法读取后先判断返回的结果是否为True,再使用imshow显示。
import cv2
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
cap = cv2.VideoCapture('..\\vtest.avi')
while cap.isOpened():
ret, img = cap.read()
if ret is not True:
print("读取完成,退出")
break
cv2.imshow('vedio', img)
key = cv2.waitKey(20)
cv2.destroyAllWindows()
cap.release()
==========运行结果:
VX公众号: 桔子code / juzicode.com
cv2.__version__: 4.5.2
读取完成,退出
扩展内容:
如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。