赞
踩
这个报错耗了我六个多小时,希望通过我的博客能帮大家省下这个时间。
在日常写脚本的时候出现了这样一个报错:
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安装的问题,而是我原代码出了错,所以我去网上找了别人跟我写的类似功能的代码去比对,最后历经六小时才发现原因所在,希望能帮助大家省下这个时间。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。