OpenCV 不再打开视频文件 VideoCapture

标签 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;

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

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

我的问题是双重的:
如何让 OpenCV 3.xx 用于读取视频文件(或者我需要回归到 2.xx?)

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

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

任何帮助深表感谢。

谢谢

最佳答案

我自己设法解决了这个问题,事实证明,在 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

关于OpenCV 不再打开视频文件 VideoCapture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48813908/

相关文章:

algorithm - SGM 视差子像素估计 - 如何?

computer-vision - 在经过校准的立体视觉装置中,如何获得实现3D三角剖分算法所需的 “camera matrices”?

python - python 中的数字识别(OpenCV 和 pytesseract)

c - Visual Studio 中 OpenCv Unresolved external symbol 错误

video - ffmpeg 将 mov 文件转换为 mp4 用于 HTML5 视频标签 IE9

FFMpeg 创建的 MP4 没有浏览器可以解码,但可以在 VLC 中播放

r - 如何画一个里面有双色粒子的 Crystal 球

Python+OpenCV 3 - 无法使用 SIFT

python - 如何在python中找到每个SLIC超像素的质心?

FFmpeg 自定义构建支持将 .ts 转换为 .mp4 文件