OpenCV4.5.3运行视频播放代码报错(-215:Assertion failed)求解
问题原因分析
- 核心错误是代码缩进错误:你将
capture.release()和cv.destroyAllWindows()写在了while循环内部,程序第一次循环结束就直接释放了视频读取流,第二次循环调用capture.read()时无法读取到有效帧,返回的frame为空,触发!_src.empty()的断言报错。 - 未添加帧读取成功校验:你没有判断
isTrue的返回值,就算读取失败也会强行调用cv.imshow()传入空帧,触发报错。 - OpenCV版本冲突:你的环境中同时存在4.0.1版本的conda源OpenCV包和4.5.3版本的pip源opencv-contrib-python包,版本不匹配也可能引发API调用异常。
- 视频路径无效:如果
Video.mp4文件和你运行的脚本不在同一工作目录,或者文件名拼写错误,VideoCapture初始化失败也会导致读取不到帧。
解决方案
1. 修正代码逻辑和缩进
调整资源释放代码的缩进位置,同时添加帧读取成功校验,修改后代码如下:
import cv2 as cv # 也可以填写视频的绝对路径,比如r'C:\Users\你的用户名\Desktop\Video.mp4' capture = cv.VideoCapture('Video.mp4') while True: isTrue, frame = capture.read() # 读取失败直接跳出循环(比如视频播放完毕、文件损坏、路径错误) if not isTrue: break cv.imshow('Video', frame) if cv.waitKey(20) & 0xFF == ord('d'): break # 注意这两行要放在while循环外面,循环结束后再释放资源 capture.release() cv.destroyAllWindows()
2. 统一OpenCV版本
先卸载所有已安装的OpenCV相关包:
pip uninstall opencv-python opencv-contrib-python libopencv py-opencv -y conda remove libopencv opencv py-opencv -y
再安装版本一致的OpenCV包:
pip install opencv-python==4.5.3.56 opencv-contrib-python==4.5.3.56
3. 确认视频路径有效性
将视频文件和脚本放在同一文件夹下,或者传入视频的完整绝对路径,避免相对路径找不到文件的问题。
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

