打工日志10.20

it2023-07-22  69

使用OpenCV进行图像抽帧,当处理到剩余的rmvb视频时出现如下报错。

[ERROR:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-9d_dfo3_\opencv\modules\videoio\src\cap.cpp (142) cv::VideoCapture::open VIDEOIO(CV_IMAGES): raised OpenCV exception: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-9d_dfo3_\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): D:/迅雷下载/movies_ready_10.17/D:/迅雷下载/toBeProcessed/洛杉矶捣蛋计划.rmvb in function 'cv::icvExtractPattern' 尝试一 使用格式工厂进行转换。在之前的任务当中,已知OpenCV可以正常识别mkv格式,因此尝试使用格式工厂进行转换,依然出现如下报错: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-9d_dfo3_\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): D:/迅雷下载/movies_ready_10.17/D:/迅雷下载/movies_ready_10.17/大喜临门.mkv in function 'cv::icvExtractPattern' 尝试二 修改文件名。查阅资料可知,需要将文件名进行编号,例如

错误的文件名:outcpp.avi 正确的文件名:outcpp001.avi

修改后的确可以正确运行,但是并没有进行正确的提取帧数。经过debug后发现是open cv无法正常地打开文件导致。

尝试三 单独使用视频流。在对rmvb编码格式进行了解之后,认为可能是其标记音频的部分报错,由于只需要逐帧提取视频,因此尝试只使用视频进行提取。出现如尝试四 重新编译opencv。经过以上尝试之后,结合网上经验,可能是opencv版本不一致或者是缺少ffmeg相关Dll包造成的。在论坛上发现所有出现问题的平台均为windows平台,于是在服务器上进行重新编译,至此成功;经过测试除了ffmeg本身不支持的rm以及rmvb格式无法处理外,其余格式均可支持处理。  结论 出现前文述所报错,应该是opencv本身配置问题,而非论坛中所谓的文件名,编码等问题。解决方法就是添加ffmeg.dll到当前路径下或者直接重新进行编译。另外2020.02版本opencv存在bug风险,谨慎使用。
最新回复(0)