Ubuntu22.04系统源码编译OpenCV 4.10.0(包含opencv_contrib)

因项目需要使用不同版本的OpenCV,而本地的Ubuntu22.04系统装了ROS2自带OpenCV 4.5.4的版本,于是编译一个OpenCV 4.10.0(带opencv_contrib)版本,给特定的项目使用,这就不用换个设备后重新安装OpenCV 了,直接依赖编译好的包使用。

PS:如需要直接在系统中安装OpenCV,可参考:https://blog.csdn.net/qq_45445740/article/details/142770493?spm=1001.2014.3001.5501

目录

  • 1.源码下载
  • 2.环境准备
  • 3.源码编译
    • 3.1 创建编译目录
    • 3.2 配置CMake选项
      • 3.2.1 OpenCV的CMake选项说明
      • 3.2.2 解决编译过程中出现下载文件如IPPICV超时失败的问题
    • 3.3 编译
    • 3.4 安装编译后的产物
    • 3.5 打包编译后的库

1.源码下载

opencv:https://github.com/opencv/opencv

  • 选择4.10.0 的源码包进行下载

在这里插入图片描述

opencv_contrib:https://github.com/opencv/opencv_contrib

  • 同样选择4.10.0 的源码包进行下载

在这里插入图片描述

  • 下载好后选择通过图形界面或者unzip命令进行解压,如下图所示:

在这里插入图片描述

2.环境准备

安装依赖

在开始之前,需要安装OpenCV编译过程中所需的依赖包。可以通过以下命令安装:

sudo apt update
sudo apt install build-essential cmake git pkg-config libjpeg-dev libtiff-dev libpng-dev libjasper-dev libdcmtk-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt install libgtk-3-dev libcanberra-gtk3-dev libatlas-base-dev gfortran
sudo apt install python3-dev python3-numpy

3.源码编译

3.1 创建编译目录

在源码目录下创建一个新的构建目录用于编译:

cd opencv/opencv-4.10.0
mkdir build
cd build

3.2 配置CMake选项

使用CMake配置OpenCV的构建选项。需要指定OpenCV contrib模块的路径,并启用需要的功能(如Python绑定等)。
PS:CMAKE_INSTALL_PREFIXOPENCV_EXTRA_MODULES_PATH需要指定编译后存放的路径和 contrib模块的路径。

cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/home/xxx/Documents/opencv/opencv-4.10.0/install \-D OPENCV_EXTRA_MODULES_PATH=/home/xxx/Documents/opencv/opencv_contrib-4.10.0/modules \-D BUILD_SHARED_LIBS=ON \-D CMAKE_CXX_STANDARD=11 \-D WITH_WEBP=OFF \-D WITH_JPEG=ON \-D WITH_TIFF=OFF \-D BUILD_EXAMPLES=ON \-D BUILD_PERF_TESTS=OFF \-D BUILD_TESTS=OFF \-D BUILD_opencv_apps=OFF \-D WITH_CUDA=OFF \-D BUILD_JAVA=OFF \-D WITH_FFMPEG=OFF \-D WITH_VTK=OFF \-D OPENCV_ENABLE_NONFREE=ON ..# CMAKE_BUILD_TYPE=Release:编译类型为Release。
# CMAKE_INSTALL_PREFIX=/opencv/opencv-4.10.0/install:指定安装目录。
# OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-4.10.0/modules:指定OpenCV Contrib模块路径。
# 其他选项根据需求启用或禁用特定功能。

3.2.1 OpenCV的CMake选项说明

OpenCV的官方文档中列出了常见的CMake选项,以下是一些常见的构建选项:

  • 基本选项
CMAKE_BUILD_TYPE=Release:选择编译类型,通常选择 Release,但也可以选择 Debug 进行调试编译。
CMAKE_INSTALL_PREFIX:指定安装路径。
WITH_CUDA=ON/OFF:启用/禁用CUDA支持(如果你的机器有NVIDIA显卡并且你希望加速计算)。
WITH_OPENCL=ON/OFF:启用/禁用OpenCL支持。
BUILD_EXAMPLES=ON/OFF:是否编译OpenCV示例。
BUILD_opencv_python3=ON/OFF:是否构建Python 3绑定(如果需要在Python中使用OpenCV)。
BUILD_TESTS=ON/OFF:是否编译单元测试。
  • Contrib模块
OPENCV_EXTRA_MODULES_PATH=path/to/opencv_contrib/modules:指定Contrib模块的路径。
OPENCV_ENABLE_NONFREE=ON/OFF:启用/禁用一些额外的非免费模块(如SIFT和SURF)。
  • 其他常见选项
WITH_FFMPEG=ON/OFF:是否启用FFmpeg(用于处理视频文件)。
WITH_GTK=ON/OFF:是否启用GTK图形界面(如果你需要GUI应用)。
WITH_TBB=ON/OFF:启用Intel TBB(线程并行)。
WITH_JPEG=ON/OFF:启用JPEG支持。
WITH_PNG=ON/OFF:启用PNG支持。

可以通过查看 CMakeLists.txt 或 OpenCV的官方GitHub仓库中的文档来获取完整的CMake选项列表。

3.2.2 解决编译过程中出现下载文件如IPPICV超时失败的问题

在这里插入图片描述

解决方法:将需要下载的文件提前下好后放在指定的目录下,并改名。

  • 如下图所示,boostdesc_binboost_256.i下载一直卡在这里,通过编译过程中的链接,提前将boostdesc_binboost_256.i文件下载好了放在opencv/opencv-4.10.0/.cache/xfeatures2d/boostdesc目录下,并修改为当前带commit命名的文件,删除原先的文件,重新再执行cmake指令。

在这里插入图片描述
在这里插入图片描述
很不幸,我替换了下面这么多。。。
在这里插入图片描述

参考:https://www.cnblogs.com/ZhaoqunZhong/p/16579015.html

3.3 编译

make -j$(nproc)
# -j$(nproc) 会让编译使用所有可用的CPU核心,以加快编译速度

3.4 安装编译后的产物

编译完成后,使用以下命令将编译结果安装到指定目录:

make install

安装完成后,OpenCV将被安装到 opencv/opencv-4.10.0/install 目录下。
在这里插入图片描述

3.5 打包编译后的库

将install目录打包生成压缩包:libopencv-4.10.0-Linux-x86_64.zip lib
这样可以将这个压缩包拷贝到其他设备上以便在其他地方使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483888.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】—— set 与 multiset

【C】—— map 与 set 1 序列式容器和关联式容器2 set 系列的使用2.1 set 和 multiset 参考文档2.2 set 类的介绍2.3 set 的迭代器和构造2.4 set的增删查2.4.1 insert2.4.2 find 与 erase2.4.3 count 2.5 lower_bound 与 upper_bound2.6 multiset 与 set 的差异2.6.1 不再去重2…

华为、华三交换机纯Web下如何创关键VLANIF、操作STP参数

华为交换机WEB操作 使用的是真机S5735,目前主流的版本都适用(V1R5~V2R1的就不在列了,版本太老了,界面完全不一样,这里调试线接的console口,电脑的网络接在ETH口) 「模拟器、工具合集」复制整段内…

学习threejs,使用canvas更新纹理

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Texture 贴图 二、&#x1…

Redis设计与实现读书笔记

Redis设计与实现读书笔记 Redis设计与实现[^1]简单动态字符串SDS的基础定义与C字符串的差别常数获取长度杜绝缓冲区溢出减少修改字符串时带来的内存重分配次数二进制安全函数兼容 链表链表和链表节点的实现 字典字典的实现哈希表定义哈希表节点定义字典定义 哈希算法解决键冲突…

【笔记】离散数学 1-3 章

1. 数理逻辑 1.1 命题逻辑的基本概念 1.1.1 命题的概念 命题(Proposition):是一个陈述句,它要么是真的(true),要么是假的(false),但不能同时为真和假。例如…

SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测

之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了。windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了。 …

浅谈——Linux命令入门之前奏

目录 一、备份操作系统 1、快照 2、克隆 二、操作系统的使用注意 1、Linux严格区分大小写 2、Linux 文件“扩展名” 3、Linux 中所有的内容以文件的形式进行保存 4、Linux 中所有的存储设备都必须挂载之后才能使用 5、Linux 系统文件目录的结构 6、Linux 系统文件的目…

matlab中disp,fprintf,sprintf,display,dlmwrite输出函数之间的区别

下面是他们之间的区别: disp函数与fprintf函数的区别 输出格式的灵活性 disp函数:输出格式相对固定。它会自动将变量以一种比较直接的方式显示出来。对于数组,会按照行列形式展示;对于字符串,直接原样输出并换行。例如…

计算机视觉——相机标定(Camera Calibration)

文章目录 1. 简介2. 原理3. 相机模型3.1 四大坐标系3.2 坐标系间的转换关系3.2.1 世界坐标系到相机坐标系3.2.2 相机坐标系到图像坐标系3.2.3 像素坐标系转换为图像坐标系3.2.4 世界坐标转换为像素坐标 3.3 畸变3.3.1 畸变类型3.3.1.1 径向畸变(Radial Distortion&a…

纯粹直播 1.7.7 |手机版和TV版,聚合六大直播平台,原画播放

纯粹直播是一款开源的应用程序,支持兴趣化主题的游戏直播、户外直播和才艺直播节目。目前可以观看斗鱼、B站、虎牙和抖音等六大直播平台的内容。该应用适配了安卓手机和电视盒子平台使用,并且软件无广告,提供原画质播放体验。 大小&#xff…

【论文复现】隐式神经网络实现低光照图像增强

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 隐式神经网络实现低光照图像增强 引言那么目前低光照图像增强还面临哪些挑战呢? 挑战1. 不可预测的亮度降低和噪声挑战2.度量友好…

算法第一弹-----双指针

目录 1.移动零 2.复写零 3.快乐数 4.盛水最多的容器 5.有效三角形的个数 6.查找总价值为目标值的两个商品 7.三数之和 8.四数之和 双指针通常是指在解决问题时,同时使用两个指针(变量,常用来指向数组、链表等数据结构中的元素位置&am…

JAVA-平台模块系统原理

菜鸟为了巩固所写 目录 菜鸟为了巩固所写 代码之间的依赖性 绘制类型依赖图 扩展到包之间的依赖关系 进一步延伸到jar包之间的依赖性 组件依赖图 JAVA技术领域中的两个著名的“擦除” Java类型的“大泥球” JAVA模块解析 模块解析的过程 模块路径明确模块的搜索与…

Keil5配色方案修改为类似VSCode配色

1. 为什么修改Keil5配色方案 视觉习惯:如果你已经习惯了VSCode的配色方案,尤其是在使用ESP-IDF开发ESP32时,Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳:Keil5的默认背景可能过于明亮,长时间使用可能会导致视…

微服务监控prometheus+Grafana

目录 Prometheus 概述 核心组件 特点 使用场景 Grafana 概述 功能特点 使用场景 PrometheusGrafana组合 部署和配置 一、准备工作 二、部署Prometheus 三、部署Grafana 四、创建监控仪表盘 五、验证和调优 总结 微服务监控是确保微服务架构稳定运行的关键环节…

⭐Java---反射--获取类信息⭐

目录 三种获取类信息的方式: 一个输入类名字获取类信息的类: 一个测试类: 测试结果 三种获取类信息的方式: 对象.getClass()类.classClass.forname("类的路径") People p; Class c1p.getClass();//将对象&#xff…

等差数列末项计算

等差数列末项计算 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给出一个等差数列的前两项a1,a2,求第n项是多少。 输入 一行,包含三个整数a1,a2&#x…

PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

全文摘要 本文介绍了一种名为PETRv2的统一框架,用于从多视图图像中进行三维感知。该框架基于先前提出的PETR框架,并探索了时间建模的有效性,利用前一帧的时间信息来提高三维物体检测效果。作者在PETR的基础上扩展了三维位置嵌入(…

【最新免费PPT制作并下载】Kimi PPT助手:智能化演示文稿生成,职场效率的革命性提升

最新免费PPT制作方法在这里!下面我想向大家介绍一款能够极大提升我们工作效率的工具——Kimi PPT助手。 Kimi PPT助手:智能化演示文稿生成 Kimi PPT助手是由Moonshot AI推出的一款革命性产品,它通过人工智能技术,实现了PPT的一键…

蓝桥杯准备训练(lesson2 ,c++)

3.1 字符型 char //character的缩写在键盘上可以敲出各种字符,如: a , q , , # 等,这些符号都被称为字符,字符是⽤单引号括 起来的,如: ‘a’ , ‘b’ &…