Python OpenCV读取视频结束时报错的解决方案

小石头
小石头
发布时间:2026-10-15 | 2人浏览过
原创

本文针对Python使用OpenCV读取视频时,视频播放结束后出现的cv2.error报错问题进行解析。通过检查视频帧读取状态,在调用imshow前增加ret判断逻辑,可有效避免空帧导致的异常中断,实现视频的正常循环播放与资源释放。

OpenCV视频读取报错现象

近期项目开发中频繁涉及视频读取任务,使用OpenCV库时常常遭遇一个困扰:视频文件播放完毕后程序会抛出错误信息。尽管该报错并不影响最终的代码执行结果,但对于追求代码健壮性的开发者而言,这种非预期的异常输出令人难以接受。

问题代码分析

以下是会触发报错的原始程序代码示例:

# -*-coding:utf-8-*-
"""
File Name: read_video.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2


def read_video(video_path: str):
    """
    OpenCV读视频小工具,解决视频读完报错的问题
    :param video_path: 输入需要读取的视频文件路径
    :return: 没有返回值
    """
    print('视频路径:', video_path)
    cap = cv2.VideoCapture(video_path)
    while cap.isOpened():
        # get a frame
        ret, frame = cap.read()

        cv2.imshow("capture", frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    print('视频读完!')
    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    path = r'D:\multi_insect_videos\multi_object00.mp4'
    read_video(path)

运行上述代码可以正常完成视频播放流程,但在控制台输出中会伴随错误信息。

Traceback (most recent call last):
  File "E:/PyCharmDocument/create_ST_image/multi_insect_processing/crop_video_to_images.py", line 76, in <module>
    read_video(path)
  File "E:/PyCharmDocument/create_ST_image/multi_insect_processing/crop_video_to_images.py", line 65, in read_video
    cv2.imshow("capture", frame)
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-uzca7qz1\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

错误原因与解决策略

该问题的根源在于视频文件播放结束后,OpenCV的imshow()函数尝试渲染最后一帧或无效帧时发生错误。解决思路是在调用imshow()显示图像之前,先判断视频帧是否成功读取;若未读取到有效帧(即视频结束),则直接跳出循环,从而避免后续操作引发异常。

优化代码实现

优化后的代码逻辑如下,通过增加状态判断消除了报错:

# -*-coding:utf-8-*-
"""
File Name: read_video.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2


def read_video(video_path: str):
    """
    OpenCV读视频小工具,解决视频读完报错的问题
    :param video_path: 输入需要读取的视频文件路径
    :return: 没有返回值
    """
    print('视频路径:', video_path)
    cap = cv2.VideoCapture(video_path)
    while cap.isOpened():
        # get a frame
        ret, frame = cap.read()
        if not ret:
            break
        cv2.imshow("capture", frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    print('视频读完!')
    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    path = r'D:\multi_insect_videos\multi_object00.mp4'
    read_video(path)

修正后的程序运行输出结果如下,显示视频正常播放完毕且无报错:

视频路径: D:\multi_insect_videos\multi_object00.mp4
视频读完!

Process finished with exit code 0

至此,关于Python OpenCV读取视频时出现报错问题的解决方案已介绍完毕。如需了解更多相关技术细节,建议查阅本站往期文章或关注后续更新,感谢大家的支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表