Ubuntu 系统 OpenCV 4 无法打开视频文件解决方案

目录

一、我的运行环境

二、问题描述

三、问题定位及分析

四、解决方案


一、我的运行环境

设备 NVIDIA Jetson Nano
处理器 ARMv8 Processor rev 1 (v8l) × 4 
GPU NVIDIA Tegra X1 (nvgpu)/integrated
操作系统 ubuntu 18.04 LTS
OpenCV版本 4.6.0
语言 C++

二、问题描述

之前一直用的OpenCV 3.4.10版本,因为项目改变,版本变为4.6.0。在项目程序运行测试过程中发现,之前正常运行的程序出现崩溃并报错:“段错误 (核心已转储)”

段错误 (核心已转储)

三、问题定位及分析

通过定位,问题出在之前基于OpenCV 3.4.10编译的一个动态库。

进一步定位发现,是因为OpenCV VideoCapture类无法打开指定路径mp4视频文件导致的问题。

于是单独对cv::VideoCapture 进行了测试,发现可以成功打开摄像头并抓取图像帧。但是无法打开mp4视频文件。

推敲原因应该是编译 OpenCV 4.6.0 时没有包含ffmpeg视频解码器或是包含了有问题的ffmpeg库。

于是重新对OpenCV进行编译。

四、解决方案

1. 首先需要安装ffmpeg,有两种方式:

(1)安装ffmpeg方案一:

sudo apt-get update
sudo apt-get install ffmpeg

安装的库路径默认在/usr/lib/aarch64-linux-gnu/(aarch64嵌入式设备的路径,x86_64的路径应该是/usr/lib/x86_64-linux-gnu)

(2)安装ffmpeg方案二:

自编译,默认安装库路径为/usr/local/lib/

2. 编译OpenCV及配置ffmpeg

由于之前项目需要用到ffmpeg视频编解码在Nano上硬件加速功能,需要自己编译ffmpeg。

于是在我系统中存在两个版本的ffmpeg。

在编译OpenCV 4.6.0 cmake-gui界面上进行配置时,我的ffmpeg库默认路径如下  

发现两种库都有调用,这或许就是之前编译的OpenCV 4.6.0无法打开视频文件的原因,于是做了以下两种调整。分别进行编译并测试。

方案一:

方案二:

测试结果表明,只有通过方案一编译的OpenCV 才可以成功无警告打开视频文件并抓取帧图像。视频打开模式可以选择cv::CAP_ANY(默认)及cv::CAP_FFMPEG。即:

cv::VideoCapture capture;
capture.open("test.mp4");
或
capture.open("test.mp4", cv::CAP_FFMPEG);

至此问题解决。

猜你喜欢

转载自blog.csdn.net/chan1987818/article/details/129037879