Python 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 OpenCV读取视频报错内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python OpenCV实现视频追踪

    本文实例为大家分享了Python OpenCV实现视频追踪的具体代码,供大家参考,具体内容如下 1. MeanShift 假设有一堆点集和一个圆形的小窗口.现在需要将此窗口移动到具有最高点集密度的区域,如下图: 第一个窗口C1是蓝色圆圈的区域.蓝色环的中心用蓝色矩形标记并命名为 C1_o.窗口中所有点的点集形成的质心在蓝色圆形点C1_r.显然,质心和环的质心不重合.移动蓝色窗口,使质心与先前获得的质心重合.在新移动的圆环的区域内再次找到圆环包围的点集的质心,然后再次移动.通常,形心和质心不重合.

  • python+opencv实现视频抽帧示例代码

    1.数据集简述: 虽然有主流庞大的COCO.VOC数据集,但是科研人员仍需要特殊领域要求的数据集,所以采用人工实地采集的方式进行收集数据集图像:通过拍照收集图像过于繁琐,所以通常是将摄像头无规则的移动旋转以及远近拉缩,进而录制视频:再通过视频抽帧的方式得到大量的图像,再将这些图像进行人工标注处理. 博主通过一个水下录制视频为例子,当这类图像在网上鲜有存在时,要求有关技术人员进行实拍采集,下图即为采集得到的视频. 为了避免不符合项目要求的数据增强,博主要求技术人员在录制视频时最大程度地让摄像头进行

  • python+openCV对视频进行截取的实现

    使用cv2对视频进行切割 import cv2 def clip_video(source_video, target_video, start_time, end_time): cap = cv2.VideoCapture(source_video) if not cap.isOpened(): logger_warning('video is not opened') else: success, frame = cap.read() f_shape = frame.shape f_heig

  • Python OpenCV读取视频报错的问题解决

    最近由于项目的需要,经常需要使用opencv读视频操作,会经常遇到一个问题,就是视频读完之后会出现报错的情况,虽然不影响代码结果,但是对于吹毛求疵的我实在忍受不了. 会报错的程序: # -*-coding:utf-8-*- """ File Name: read_video.py Program IDE: PyCharm Create File By Author: Hong """ import cv2 def read_video(video

  • Python导包模块报错的问题解决

    Python导包模块报错的问题 Moelimoe import报错No module named "xxx"的问题如何将指定目录作为项目根目录,让项目根目录下的包/模块都可以直接导入?(linux下)Python导入模块时,解释器如何定位模块:1.当前目录2.内置模块列表3.sys.path列表的目录 由于python没有定位到模块目录时出现的No module named "xxx"问题,大概有两种解决思路:1.在sys.path永久加入需要导入的模块的父目录:2

  • python opencv 读取本地视频文件 修改ffmpeg的方法

    Python + opencv 读取视频的三种情况: 情况一:通过摄像头采集视频 情况二:通过本地视频文件获取视频 情况三:通过摄像头录制视频,再读取录制的视频 摄像头采集.本地视频文件的读取.写视频文件,网上都有代码. 我发现情况一和情况三都没有问题,大家注意读取自己通过摄像头录制的视频文件是没有问题的.但读取其他视频都会发现帧率为0(如果你获取视频的帧率并打印出来的话),并且退出读取.这时候读取是不成功的. 进去正题:如何解决读取视频失败的情况.这个问题很普遍,以至在官方教程的程序下面都提示

  • Python multiprocess pool模块报错pickling error问题解决方法分析

    本文实例讲述了Python multiprocess pool模块报错pickling error问题解决方法.分享给大家供大家参考,具体如下: 问题 之前在调用class内的函数用multiprocessing模块的pool函数进行多线程处理的时候报了以下下错误信息: PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed 查了下官方文档发现python默认只能pi

  • Python OpenCV读取显示视频的方法示例

    目标 学习读取视频,显示视频和保存视频. 学习从相机捕捉并显示它. 你将学习以下功能:cv.VideoCapture(),cv.VideoWriter() 从相机中读取视频 通常情况下,我们必须用摄像机捕捉实时画面.提供了一个非常简单的界面.让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来.只是一个简单的任务开始. 要捕获视频,你需要创建一个 VideoCapture 对象.它的参数可以是设备索引或视频文件的名称.设备索引就是指定哪个摄像头的数

  • Python使用pip安装报错:is not a supported wheel on this platform的解决方法

    本文讲述了Python使用pip安装报错:is not a supported wheel on this platform的解决方法.分享给大家供大家参考,具体如下: 可能的原因1:安装的不是对应python版本的库,下载的库名中cp27代表python2.7,其它同理. 可能的原因2:这个是我遇到的情况(下载的是对应版本的库,然后仍然提示不支持当前平台) 在https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy中,我下载到的numpy库文件名: n

  • Python imageio读取视频并进行编解码详解

    读视频和写视频一直由于编解码的问题给程序员造成很多麻烦.对此进行了一些探索.用Python读取视频有两种主要方法,分别是基于imageio库和OpenCV,其中OpenCV加上ffmpeg的安装编译很麻烦,推荐大家使用第一种方法,不过大家也可依据自己的需求进行使用. 方法一:使用imageio库 1. 一般imageio库Anconda自带的有,不用我们单独安装,没有安装的可用pip安装或自己下载. imageio使用方法可参考:http://imageio.readthedocs.io/en/

  • Python编程源码报错解决方法总结经验分享

    目录 一.前言 二.解决过程 三.总结 一.前言 最近本都是开开心心的打开电脑写一些祖传BUG 但一个报错阻碍了我写BUG的进度! 这年代还有能阻碍我写BUG的报错??? 二.解决过程 一个新项目要做token认证,所以拷了原来的项目代码 没错,高级CV工程师就是我!!! 加入了一些token配置信息后,启动项目准备调试. 启动很成功没有任何报错. 然后启动前端项目开始一天的写BUG时间! 结果登录的时候就报错了!! 把之前项目的代码拷过来还会报错? 有点奇怪,但都是小场面! 开始调试 结果一看

  • 利用python OpenCV去除视频水印

    上面的图片展示的是视频中的某一帧,需要将图片中的,实体拓展和退出全屏以及右上角的两个圆圈按钮给删除掉. 解决思路一个很简单的想法就是,从图片上其它两块背景相同的地方,拷贝两个块替换掉按钮位置的块 用下面的代码先从视频中导出一帧图片,然后统计需要删除按钮的坐标位置 实现代码如下: import cv2 # 创建读取视频的类 capture = cv2.VideoCapture("watermark.mp4") # 得到视频的高度 height = capture.get(cv2.CAP_

  • Python+OpenCV读写视频的方法详解

    目录 读视频,提取帧 接口函数:cv2.VideoCapture() 获取视频信息 使用set(cv2.CAP_PROP_POS_FRAMES)读取指定帧 读取函数(重点) 将图像写为视频 示例 fourcc 读视频,提取帧 接口函数:cv2.VideoCapture() 通过video_capture = cv2.VideoCapture(video_path)可以获取读取视频的句柄.而后再通过flag, frame = video_capture.read()可以读取当前帧,flag表示读取

随机推荐