这个报错耗了我六个多小时,希望通过我的博客能帮大家省下这个时间。
在日常写脚本的时候出现了这样一个报错:
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/文章来源:https://www.toymoban.com/news/detail-660731.html
当时我解决这个问题是受到了一个外国小哥回答的启发,即有可能不是opencv安装的问题,而是我原代码出了错,所以我去网上找了别人跟我写的类似功能的代码去比对,最后历经六小时才发现原因所在,希望能帮助大家省下这个时间。文章来源地址https://www.toymoban.com/news/detail-660731.html
到了这里,关于opencv报错解决1——OpenCV(4.5.4-dev):error:CAP_IMAGES: can‘t find starting number: ‘cv::icvExtractPattern的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!