这个报错耗了我六个多小时,希望通过我的博客能帮大家省下这个时间。

在日常写脚本的时候出现了这样一个报错:

OpenCV(4.5.4-dev) D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): C:/Users/Desktop/test in function 'cv::icvExtractPattern'

在网上查了很多类似的报错的解决方法,几乎所有的都试过了,opencv卸载重装了很多遍,都没有用,甚至有的时候还出现了结尾是cv::imwrite的报错。这个报错从晚上九点一直到凌晨三点半我才找到解决方法。

首先,我的代码如下:

import cv2
import os

times = 1  # 提取的帧记数
sourceFileName = '01_11__talking_against_wall__9229VVZ3'
frame_frequency = 50  # 提取视频的帧率,即每1帧提取几个视频
file_path = 'videoTest/' + sourceFileName + '/'
video_path = "C:/Users/Desktop/test"  # 读取视频的文件目录
if not os.path.exists(file_path):  # 如果文件路径不存在就创建文件夹
    os.makedirs(file_path)
camera = cv2.VideoCapture(video_path)
while True:
    times = times+1
    res, image = camera.read()
    if not res:
        print('not res , not image')
        break
    if times % frame_frequency == 0:
        cv2.imwrite(file_path + "/" + str(times) + ".jpg", image)
        times = times + 1  # 记录存储照片的次数
    camera.release()

经过很长时间的探寻我,我终于发现了我的问题所在。我被video_path这个变量名给误导了,以为只需要传入视频文件所在的路径即可,但事实上,cv2.VideoCapture要接收的是视频所在路径+视频名称/格式,将上述代买第8行修改为:video_path = "C:/Users/11304/Desktop/test/01_11__talking_against_wall__9229VVZ3.mp4"

原报错解决,可以正常运行。

网上有很多解决方法,由于我基本都看过一遍,所以在此总结一下,方便大家解决。我发现opencv这种类似格式的报错大多是由以下几种原因造成的:

(1)文件目录或者视频名称中含有中文,必须修改成英文

(2)图片或者视频不存在

(3)opencv与python的版本不对应。使用pip或者conda安装的opencv版本默认为最新版,但是事实上opencv和python有一个比较严格的版本对应关系。在此我附上了下载链接:

https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/

里面cp后面的数字指的是python版本;windows系统下载win的,Linux、mac以此类推;X64,X32是电脑位数,这个自己查看自己电脑的位数即可,64位用X64,32位用X32。

下载好之后,将下载的whl放到python对应环境的Lib/sitepackage里面,这里面专门用于存放python的一些库,然后在对应文件夹打开cmd用指令安装即可:pip install 文件名

这里再附上opencv的官网,里面可以帮助你解决一些常见的安装报错问题:https://pypi.org/project/opencv-python/

当时我解决这个问题是受到了一个外国小哥回答的启发,即有可能不是opencv安装的问题,而是我原代码出了错,所以我去网上找了别人跟我写的类似功能的代码去比对,最后历经六小时才发现原因所在,希望能帮助大家省下这个时间。

Logo

分享最新、最前沿的AI大模型技术,吸纳国内前几批AI大模型开发者

更多推荐