无法使用 cv::VideoCapture 打开 .mp4

Posted

技术标签:

【中文标题】无法使用 cv::VideoCapture 打开 .mp4【英文标题】:Can't open .mp4 with cv::VideoCapture 【发布时间】:2021-07-13 07:59:18 【问题描述】:

我正在尝试运行以下简单代码

# cat VideoCaptureTest.cpp
#include <cstdlib>
#include <string>
#include <iostream>
#include <opencv2/videoio.hpp>

using namespace std;
int main(int argc, char** argv) 
  string input("/root/OpenCVTest/720p.mp4");
  cv::VideoCapture capture(input);
  if (!capture.isOpened()) 
    cout << "Failed to open " << input << endl;
    exit (1);
  

  return 0;

编译成功

# g++ -ggdb VideoCaptureTest.cpp -lopencv_videoio -o VideoCaptureTest

VideoCaptureTest 无法打开指定的.mp4 文件,尽管该文件存在并且可以通过ffmpeg -i /root/OpenCVTest/720p.mp4 推断

# ./VideoCaptureTest
Failed to open /root/OpenCVTest/720p.mp4

我已经用

编译了OpenCV
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON \
-D WITH_QT=OFF \
-D WITH_V4L=ON \
-D CMAKE_SHARED_LINKER_FILES=-wl,-Bsymbolic \
-D WITH_FFMPEG=1 \
-D WITH_CUDA=ON \
-D CUDA_GENERATION=Turing \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_LAPACK=OFF \
-D BUILD_opencv_python2=OFF ..

可以验证安装使用

# pkg-config --modversion opencv4
4.5.3

我在Ubuntu 20.04 GCP VM 上的nvidia/cuda:10.0-devel-ubuntu18.04 docker 容器上使用T4 GPU 运行它。它没有任何图形环境。

【问题讨论】:

我还没有从源代码构建opencv,如果你将cv::CAP_FFMPEG传递给cv::VideoCapture的第二个参数,结果是什么?你试过明确地运行capture.open() 吗? 还是一样。 运行 capture.open(input) 给出了相同的结果 【参考方案1】:

https://github.com/justadudewhohacks/opencv4nodejs/issues/274 解决了这个问题。 我需要

apt install libavcodec-dev libavformat-dev libavutil-dev  libswscale-dev libavresample-dev

【讨论】:

以上是关于无法使用 cv::VideoCapture 打开 .mp4的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Android 手机中使用 cv2.VideoCapture(0) 打开相机

无法使用videoCapture opencv打开视频

opencv2.4用cv::VideoCapture无法打开视频,视频路径是没错的,之前打开图片没问题,但视频却打不开

cv::VideoCapture 在 C# 项目中从 DLL 使用时不会打开文件或流

如何使用 cv2.VideoCapture() 远程打开来自不同计算机摄像头的实时视频流?

OpenCV cv::Mat , imshow() , cv::VideoCapture 在运行时不工作