考慮到可能是視頻末尾讀取幀不正確導致的。
查看變量管理器發現,在播放時按下’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()