ubuntu下使用cmake编译opencv4.8.0+ffmpeg4.2.2+cuda11.1

devtools/2024/9/25 19:06:31/

1.源码下载

(1)下载ffmpeg4.2.2、opencv4.8.0源码,这里提供一个百度网盘地址:

链接:https://pan.baidu.com/s/1pBksr0_RtKL0cM6Gsf2MGA?pwd=cyai
提取码:cyai

(2)解压所有文件
例如解压到cytech_ai/env/opencv_build文件夹下:
unzip opencv-4.8.0.zip
unzip opencv_contrib-4.8.0.zip
tar -xf ffmpeg_4.2.2.orig.tar
目录如下:
在这里插入图片描述
在这里插入图片描述

2.ffmpeg编译

进入ffmpeg-4.2.2文件夹下,并输入一下命令:

cd /cytech_ai/env/opencv_build/ffmpeg-4.2.2
./configure --enable-shared --enable-avresample --disable-x86asm --prefix=/usr/local/ffmpeg

使用make进行编译:

make -j32
make install

编译完成后,编译后的文件保存在:/usr/local/ffmpeg目录下,并将bin和lib目录添加到对应的文件中。

vim /etc/ld.so.conf

在文件中添加ffmpeg的lib文件夹
在这里插入图片描述
终端执行:

ldconfig

编辑环境变量:

vim /etc/profile
#在文件末尾追加一行:
export PATH=/usr/local/ffmpeg/bin:$PATH
#执行保存
source /etc/profile

在终端输入:

ffmpeg -version

在这里插入图片描述
表示安装成功,并打印版本信息

3.编译opencv

(1)在opencv-4.8.0文件夹下新建一个build文件夹,并执行cmake命令:

cd /cytech_ai/env/opencv_build/opencv-4.8.0
mkdir build && cd build

执行完成后,填写cmake命令:

cmake  -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/cytech_ai/env/opencv480gpu -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.8.0/modules -DWITH_GTK=OFF -DWITH_CUDA=ON -DWITH_CUDNN=ON -DWITH_TBB=ON -DOPENCV_DNN_CUDA=ON -DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DWITH_CUBLAS=1 -DOPENCV_ENABLE_NONFREE=ON   -DBUILD_CUDA_STUBS=ON  -DBUILD_opencv_world=ON -DWITH_FFMPEG=ON ..

-DCMAKE_INSTALL_PREFIX:表示编译后make install的位置
-DOPENCV_EXTRA_MODULES_PATH:表示cuda相关的第三方文件
-DBUILD_opencv_world=ON:表示最终只编译得到一个opencv_world.so文件,方便后续链接和移动库,建议编成一个。
-DWITH_FFMPEG:表示打开ffmpeg,便于后续使用rtsp和读取视频文件videocapture使用。
其他的一些cuda,cudnn和加速的算子都打开就行。

当显示:
在这里插入图片描述
ffmpeg为YES时,表示找到了前面编译的ffmpeg,直接make即可:

make -j32 && make install

编译时间较长,等待编译完成即可在/cytech_ai/env/opencv480gpu文件夹下找到编译后的库
make 过程:
在这里插入图片描述
make install过程:
在这里插入图片描述
编译完成:
在这里插入图片描述

4.常见问题:

ubuntuopencv_ffmpegNO_91">(1)ubuntu下编译带opencv ffmpeg显示NO

在这里插入图片描述
编译的时候,系统一直找不到ffmpeg,一直显示为NO,主要原因是编译的位置没有添加环境变量,最好就编译在usr/local下,目前是测过的了,其他位置确实会出现找不到的情况:

vim /etc/profile

在文件末尾添加:

export PATH=/usr/local/ffmpeg/bin:$PATH

:wq保存退出,并执行修改后的环境变量:

source /etc/profile

(2)ffmpeg文件夹下执行configure失败,报错nasm/yasm not found

报错详细信息:

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.

在这里插入图片描述
在命令中添加–disable-x86asm 取消优化即可,也可以apt install nasm,再使用该命令

./configure --enable-shared --enable-avresample --prefix=/usr/
#改为
./configure --enable-shared --enable-avresample --disable-x86asm --prefix=/usr/local/ffmpeg

ubuntuapt_install__129">(3)ubuntu下apt install 安装文件显示无法定位软件包:

直接运行下面的代码,再次尝试即可:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update

(4)不编译cuda,直接编译cpu版本的

去掉需要使用cuda的命令:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_INSTALL_PREFIX=/cytech_ai/env/opencv480cpu/ -DOPENCV_ENABLE_NONFREE=ON -DBUILD_OPENCV_WORLD=ON -DWITH_FFMPEG=ON ..

5.参考

1.https://blog.csdn.net/jiexijihe945/article/details/125070402
2.https://blog.csdn.net/Damon_Sandy/article/details/131995799
3.https://blog.csdn.net/weixin_48896613/article/details/124415754
4.https://launchpad.net/ubuntu/+source/ffmpeg


http://www.ppmy.cn/devtools/48515.html

相关文章

【RabbitMQ】初识 RabbitMQ

初识 RabbitMQ 1.认识 RabbitMQ1.1 介绍1. 2.使用场景1.2.1 推送通知1.2.2 异步任务1.2.3 多平台应用的通信1.2.4 消息延迟1.2.5 远程过程调用 1.3 特性 2.基本概念2.1 生产者、消费者和代理2.2 消息队列2.3 交换机2.3.1 direct2.3.2 topic2.3.3 headers2.3.4 fanout 2.4 绑定2…

SpringAOP-代理方式-Cglib动态代理

文章目录 cglib动态代理 cglib是基于继承的方式实现的 是继承目标类从而产生代理类 springaop底层使用的就是cglib的动态代理 package com.itheima.cjlibproxy;import net.sf.cglib.proxy.Callback; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodI…

YOLOv9改进策略 | 损失函数篇 | 利用SlideLoss助力YOLOv9有效涨点(附代码 + 完整修改方式)

一、本文介绍 本文给大家带来的是分类损失 SlideLoss损失函数,我们之前看那的那些IoU都是边界框回归损失,和本文的修改内容并不冲突,所以大家可以知道损失函数分为两种一种是分类损失另一种是边界框回归损失,上一篇文章里面我们总…

【春秋云镜】Faculty Evaluation System未授权任意文件上传漏洞(CVE-2023-33440)

因为该靶场没有Write up,索性自己搞一下,方便别人,快乐自己! 漏洞概述: Sourcecodester Faculty Evaluation System v1.0 is vulnerable to arbitrary code execution via /eval/ajax.php?actionsave_user. 漏洞复现&#xff…

Web前端与REST API:深度解析与实战指南

Web前端与REST API:深度解析与实战指南 在Web开发领域,前端与后端之间的数据交互至关重要,而REST API作为连接两者的桥梁,扮演着不可或缺的角色。本文将从四个方面、五个方面、六个方面和七个方面,深入剖析Web前端与R…

2021年CSP-J-T3-网络连接(network)

2021年CSP-J-T3-网络连接(network) 题目: 示例2 输入 10 Server 192.168.1.1:80 Client 192.168.1.1:80 Client 192.168.1.1:8080 Server 192.168.1.1:80 Server 192.168.1.1:8080 Server 192.168.1.999:0 Client 192.168.1.1.8080 Client …

贪吃蛇双人模式设计(2)

敲上瘾-CSDN博客控制台程序设置_c语言控制程序窗口大小-CSDN博客贪吃蛇小游戏_贪吃蛇小游戏csdn-CSDN博客 一、功能实现: 玩家1使用↓ → ← ↑按键来操作蛇的方向,使用右Shift键加速,右Ctrl键减速玩家2使用W A S D按键来操作蛇的方向&am…

【代码随想录】【算法训练营】【第30天 1】 [322]重新安排行程 [51]N皇后

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 30,周四,好难,会不了一点~ 题目详情 [322] 重新安排行程 题目描述 322 重新安排行程 解题思路 前提:…… 思路:回溯。 重点&…