OpenCV不再打开视频文件VideoCapture

时间:2018-02-15 18:21:01

标签: opencv ffmpeg computer-vision

我有一个看似由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实施有关,因为各种搜索已经发现其他人有此问题。

非常感谢任何帮助。

由于

1 个答案:

答案 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