OpenCV c++不加载任何视频在Ubuntu 16.04下的视频捕获

OpenCV C++ does not load ANY video on Ubuntu 16.04 under VideoCapture

本文关键字:04下 的视频 Ubuntu c++ 加载 任何 视频 OpenCV      更新时间:2023-10-16

我在安装所需的依赖项后安装了OpenCV 2.4.13,我正在用Qt Creator 5.7运行它,以便在c++中编程。在一些教程之后,我设法加载静态图像,处理它们等等。但是当我尝试使用cv:: videoccapture时,例如:

cv::VideoCapture cap;
cap.open("<File location/file name>");

或:

cv::VideoCapture("<File location/file name");

cap.isOpened()总是返回false。即使我试图忽略这一点,并进一步使用Mat、read、imshow等,程序也会崩溃。我已经尝试了关于加载文件的一切:给出std::string作为参数,给出*char,将视频文件放在更容易的位置,在项目目录中,没有任何作用。我尝试了两种不同的。mp4格式,mov格式和cube4格式。在"samples"文件夹中给出的avi文件(来自openCV示例)。所有这些文件都可以在我的VLC中完美地播放。我已经在Qt中尝试了QtWidgets项目和一个plainCpp项目。这行不通。在搜索它之后,我发现这个bug是非常反复出现的,但我刚刚找到了Windows的解决方案,关于在项目中添加.dll文件。但是在Ubuntu上我该怎么做呢,因为Linux不使用dll ?

我想出了解决这个问题的方法,我在这里与遇到类似问题的每个人分享。首先,由于某种未知的原因,我的FFmpeg安装在OpenCV编译中被忽略了。由于FFmpeg需要读写视频,OpenCV无法完成这些工作,并且没有显示任何错误或警告消息。不管怎样,我决定从头再试一遍。请记住:如果您只是重新安装FFmpeg,它不会解决您的问题;之后,你必须做cmake,再次编译和安装OpenCV。我从存储库下载了最新版本的FFmpeg,编译并重新安装了它。我试图再次编译OpenCV,但在处理带有消息的FFmpeg (Libav) .h文件时,它总是停留在约15%:

<file_name.h> can not be used when making a shared object; recompile with -fPIC

所以我搜索了它,经过一番努力,我发现有必要在执行make之前用以下配置行编译FFmpeg:

.configure --enable-pic --enable-shared

一些ffmpeg安装教程在"configure"之后包含更多命令。然后我编译并重新安装了FFmpeg,编译并重新安装了OpenCV。在那之后,我能够加载视频(cap.isOpened()不再是假的),但尽管如此,我得到以下错误的任何视频,他们没有被读取:

Assertion desc failed at libswscale/swscale_internal.h:674

我发现解决这个问题的方法是下载最新的稳定的 FFmpeg版本而不是最新的版本,再次编译它,再次编译OpenCV,然后它成功了!现在我可以加载和编写视频文件(我还没有用多个编解码器测试过)。我想知道为什么他们不推出预先编译的OpenCV版本,这样我们就不需要处理所有这些事情了…

概括一切:

  • 下载最新稳定版本的FFmpeg。如果它不起作用,试试旧的。(我使用2.8.6,最后一个稳定的现在)。
  • 解压,从ffmpeg文件夹打开终端,编译并安装,输入:

.configure --enable-pic --enable-shared

make

sudo make install

  • 下载OpenCV(如果你还没有这样做),按照官方linux安装教程解压并安装:http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html linux安装

我通过安装"opencv3.2.0-dev"代替"opencv3.2.0"来解决这个问题;