我有一个看似由OpenCV 3.xx引起的问题 - 这个问题在OpenCV 2.xx中没有显现
问题是阅读视频文件。我已将代码设置如下:
>#include <opencv2\opencv.hpp>
>#include <opencv2\core\core.hpp>
>#include <opencv2\highgui\highgui.hpp>
>#include <opencv2\imgproc\imgproc.hpp>
>#include <opencv2\features2d\features2d.hpp>
>int main()
> cv::VideoCapture cap;
> cv::Mat frame;
> if(!cap.open("Myfile.avi"))
> std::cout << "Open failed" << std::endl;
> else
> cap.read(frame);
>
> cv::imshow("Frame", frame);
> cv::waitKey(5000);
> return 0;
现在的问题是当代码到达&#34; cap.read(frame)&#34;我得到一个&#34;向量下标超出范围&#34; OpenCV 3.40出错,而我的OpenCV 2.4.9版本不会出现这种情况。该文件的格式是avi,它不是一些奇怪的编解码器,显然它适用于以前版本的OpenCV。
我尝试过其他OpenCV 3.xx版本,我只是在阅读文件时遇到相同或类似的问题。
我的问题有两个: 如何让OpenCV 3.xx与阅读视频文件一起工作(或者我需要回归到2.xx?)
为什么主要版本更改完全搞砸了视频文件读取?这对计算机视觉API没有任何意义。
作为一种猜测,它将与FFMPEG实施有关,因为各种搜索已经发现其他人有此问题。
非常感谢任何帮助。
由于
答案 0 :(得分:1)
我自己设法解决了这个问题,事实证明在OpenCV 3.xx中,我必须强制VideoCapture :: open使用FFMPEG库:
>cap.open("Myfile.avi", cv::CAP_FFMPEG)
其中后一个参数是用于标识要使用的VideoCapture API后端的标志。对于任何其他感兴趣的人,可以在此处找到该列表: https://docs.opencv.org/3.3.0/d4/d15/group__videoio__flags__base.html