【问题标题】:OpenCV no longer opens video files VideoCaptureOpenCV 不再打开视频文件 VideoCapture
【发布时间】:2018-07-26 14:28:59
【问题描述】:

我有一个问题似乎是由 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;

现在的问题是,当代码到达“cap.read(frame)”时,OpenCV 3.40 出现“向量下标超出范围”错误,而我构建的 OpenCV 2.4.9 不会发生这种情况。文件的格式是avi,它不是什么奇怪的编解码器,显然它可以在以前版本的OpenCV中工作。

我尝试过其他 OpenCV 3.xx 版本,但我在读取文件时遇到了相同或类似的问题。

我的问题有两个: 如何让 OpenCV 3.xx 能够读取视频文件(或者我需要回归到 2.xx?)

为什么重大修订更改完全搞砸了视频文件阅读?这对计算机视觉 API 没有任何意义。

猜测这与 FFMPEG 实现有关,因为各种搜索发现其他人对此有疑问。

非常感谢任何帮助。

谢谢

【问题讨论】:

    标签: opencv ffmpeg computer-vision


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2013-01-22
      • 2012-07-13
      • 1970-01-01
      • 2017-11-12
      • 2017-09-28
      • 2012-04-30
      • 1970-01-01
      • 2012-09-08
      • 2021-03-22
      相关资源
      最近更新 更多