考虑到可能是视频末尾读取帧不正确导致的。
查看变量管理器发现,在播放时按下’q’键退出,控制台不会报错,ret变量值为True;播放到末尾时,控制台报错,ret变量值为False。
到这里问题的原因就比较明朗了——ret(return value缩写)是一个布尔值,表示当前这一帧是否获取正确。视频播放到最后一帧后,程序并没有停止读取文件,而是继续读取(此时视频文件内已经没有数据供程序读取了),读不出数据,自然就报错了。找到了问题,解决方案也就有了:读完最后一帧以后,ret == False时跳出while循环,结束程序就行了
import cv2 cap = cv2.VideoCapture('E:/pycharm/deep_learning/output.avi') # 精确到根目录 while(cap.isOpened()): ret, frame = cap.read() # 第一个参数ret 为True 或者False,代表有没有读取到图片 # 第二个参数frame表示截取到一帧的图片 if ret == True: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('frame', gray) else: break if cv2.waitKey(30) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()