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

news2024/11/24 22:44:43

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.常见问题:

(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

(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.coloradmin.cn/o/1817347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++实现二叉搜索树(上)

宝贝们,好久不见,甚是想念🤗小吉断更了差多有10多天,在断更的日子里,小吉也有在好好学习数据结构与算法,但是学的并不多而且学的并不是很认真。主要是中途笔记本屏出现问题了(这件事有点让小吉我…

迅狐短视频矩阵管理系统核心功能

一、多平台管理:连接多个主流自媒体平台,满足多平台、多账号、多角色的协调需求 在现如今的多元化媒体环境中,一个优秀的内容创作者需要同时管理多个自媒体平台,并以不同的身份角色展现自己。迅狐短视频矩阵管理系统强大的多平台…

RPC(远程过程调用):技术原理、应用场景与发展趋势

摘要: RPC(Remote Procedure Call)是一种通信协议,用于实现跨网络的进程间通信。它提供了一种简单高效的方式,使得分布式系统中的不同组件能够像调用本地函数一样调用远程函数。本篇博客将介绍RPC的基本概念&#xff0…

kafka 快速上手

下载 Apache Kafka 演示window 安装 编写启动脚本,脚本的路径根据自己实际的来 启动说明 先启动zookeeper后启动kafka,关闭是先关kafka,然后关闭zookeeper 巧记: 铲屎官(zookeeper)总是第一个到,最后一个走 启动zookeeper call bi…

虚拟声卡实现音频回环

虚拟声卡实现音频回环 一、电脑扬声器播放声音路由到麦克风1. Voicemeeters安装设置2. 音频设备选择 二、回声模拟 一、电脑扬声器播放声音路由到麦克风 1. Voicemeeters安装设置 2. 音频设备选择 以腾讯会议为例 二、回声模拟 选中物理输入设备“Stereo Input 1”和物理输出设…

浅谈内联钩取原理与实现

前言 导入地址表钩取的方法容易实现但是存在缺陷,若需要钩取的函数不存在导入地址表中,那么我们就无法进行钩取,出现以下几种情况时,导入函数是不会存储在导入地址表中的。 延迟加载:当导入函数还没调用时&#xff0…

Rust 实战丨通过实现 json! 掌握声明宏

在 Rust 编程语言中,宏是一种强大的工具,可以用于在编译时生成代码。json! 是一个在 Rust 中广泛使用的宏,它允许我们在 Rust 代码中方便地创建 JSON 数据。 声明宏(declarative macros)是 Rust 中的一种宏&#xff0…

debug调试_以Pycharm为例

文章目录 作用步骤打断点调试调试窗口 作用 主要是检查逻辑错误,而非语法错误。 步骤 打断点 在需要调试的代码行前打断点,执行后会停顿在断点位置(不运行) 调试 右键“debug”,或者直接点击右上角的小虫子 调试…

2-2 基于matlab的变邻域

基于matlab的变邻域,含变惯性权重策略的自适应离散粒子群算法,适应函数是多式联运路径优化距离。有10城市、30城市、75城市三个案例。可直接运行。 2-2 路径规划 自适应离散粒子群算法 - 小红书 (xiaohongshu.com)

Vue基本使用-02

上节我们讲了什么是mvvm模型,以及我们vue的一些常用指令,今天给大家讲一下vue的基本使用,在将之前我们需要重点讲解我们的一个指令,v-model指令 v-model v-model 可以在组件上使用以实现双向绑定,什么是双向绑定呢?意思就是当我们…

【Ubuntu双系统】两块硬盘分别安装系统,一块硬盘安装Ubuntu 一块安装Windows

【Ubuntu双系统】两块硬盘分别安装双系统,一块硬盘安装Ubuntu 一块安装Windows 前言安装Ubuntu前置操作安装过程参考文献 前言 机器情况:两块1T的硬盘,其中一块已安装Windows 11现需在另一块硬盘上安装Ubuntu,该硬盘还未初始化Ub…

SQL聚合函数---汇总数据

此篇文章内容均来自与mysql必知必会教材,后期有衍生会继续更新、补充知识体系结构 文章目录 SQL聚集函数表:AGV()count()根据需求可以进行组合处理 max()min()max()、min()、avg()组…

Mac下载了docker,在终端使用docker命令时用不了

问题:在mac使用docker的时候,拉取docker镜像失败 原因:docker是需要用app使用的 ,所以在使用的时候必须打开这个桌面端软件才可以在终端上使用docker命令!!!

【PL理论】(21) 函数式语言:支持匿名函数 fun x → E | 设计递归函数 | 支持递归函数:let rec ...

💭 写在前面:本章我们将讲解支持匿名函数,先回顾一下 F# 语言表示函数的方法,然后引出它。随后我们讲解一下如何设计递归函数,最后让我们的 F- 语言支持递归函数。 目录 0x00 回顾:F# 语言 0x01 支持匿名…

深度学习笔记: 最详尽Airbnb租赁搜索排名设计

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家! Airbnb租赁搜索排名 1. 问题陈述 Airbnb用户在特定地点搜索可用房源。系统应在搜索结果中对多个房源进…

Qt飞机大战小游戏

Gitee地址 :plane-game: 基于Qt的飞机大战小游戏 GitHub地址: https://github.com/a-mo-xi-wei/plane-game

Vue25-内置指令02:v-text指令

一、v-html对比v-text v-html支持结构的解析,v-text不支持结构的解析。 二、v-html的安全性问题 2-1、cookie的原理(node.js) 7天免登录,cookie实现。 cookie的本质就是类似于json的字符串,格式是:key-va…

图片导入AutoCAD建立草图—CAD图像导入插件

插件介绍 CAD图像导入插件可将PNG,JPG等格式图片导入到AutoCAD软件内建立图像边缘的二维线条模型。插件可以提取图像黑色或白色区域的边界,并可绘制原状边界或平滑边界两种样式。 模型说明 边界提取,黑色或白色边界的提取根据原图类型选择…

【云原生| K8S系列】Kubernetes Daemonset,全面指南

Kubernetes中的DaemonSet是什么? Kubernetes是一个分布式系统,Kubernetes平台管理员应该有一些功能可以在所有节点上运行特定于平台的应用程序。例如,在所有Kubernetes节点上运行日志代理。 这就是Daemonset发挥作用的地方。 Daemonset是一个原生的K…

查询满足条件的元组-WHRER子句(运算符、BETWEEN 、LIKE、IN、NULL)

一、WHERE子句(筛选出使选择表达式为真的元组) 1、SELECT-FROM子句可以实现数据的查询(会查询出所有元组),加上WHERE子句之后可以实现数据的筛选(会查询出满足条件的元组) SELECT 【ALL|DISTI…