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

在将OpenCV版本从3.4.10升级到4.6.0后,程序运行时遇到‘段错误(核心已转储)’。问题源于OpenCVVideoCapture无法打开mp4视频,分析后推测是ffmpeg库问题。通过重新编译OpenCV并指定ffmpeg路径,问题得到解决,现在能成功打开并处理视频文件。
摘要由CSDN通过智能技术生成

目录

一、我的运行环境

二、问题描述

三、问题定位及分析

四、解决方案


一、我的运行环境

设备NVIDIA Jetson Nano
处理器ARMv8 Processor rev 1 (v8l) × 4 
GPUNVIDIA 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);

至此问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值