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

news2024/12/23 13:48:18

因项目需要使用不同版本的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.coloradmin.cn/o/2255752.html

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

相关文章

获取联通光猫的管理员密码

缘起:联通给免费更换了一个新的光猫,烽火的光路由,一个WAN口,4个LAN口,带USB接口,欣欣然接受。但是呢,发现以前的管理员密码CUAdmin不能用了。经过一系列查询,借助别人的经验&#x…

残差网络连接,使得输入与输出的尺寸一样

def forward(self, x):out self.layer1(x)out self.layer2(out)# 使用插值将输入x上采样至与layer2输出相同的尺寸x F.interpolate(x, size(out.size(2), out.size(3)), modebilinear, align_cornersFalse)# 确保x的通道数与out匹配x x[:, :out.size(1), :, :] # 选择前ou…

计算机网络原理之HTTP与HTTPS

一、前言 为了理解HTTP,我们有必要事先了解一下TCP/IP协议簇。 通常我们使用的网络(包括互联网)是在TCP/IP协议簇的基础上运作的。而HTTP属于它内部的一个子集。 计算机与网络设备要相互通信,双方必须基于相同的方法。比如&#…

实验三:Mybatis-动态 SQL

目录: 一 、实验目的: 通过 mybatis 提供的各种标签方法实现动态拼接 sql 二 、预习要求: 预习 if、choose、 when、where 等标签的用法 三、实验内容: 根据性别和名字查询用户使用 if 标签改造 UserMapper.xml使用 where 标签进行…

NLP论文速读(斯坦福大学)|使用Tree将语法隐藏到Transformer语言模型中正则化

论文速读|Sneaking Syntax into Transformer Language Models with Tree Regularization 论文信息: 简介: 本文的背景是基于人类语言理解的组合性特征,即语言处理本质上是层次化的:语法规则将词级别的意义组合成更大的成分的意义&…

C++STL容器vector容器大小相关函数

目录 前言 主要参考 vector::size vector::max_size vector::resize vector::capacity vector::empty vector::reserve vector::shrink_to_fit 共勉 前言 本文将讨论STL容器vector中与迭代器相关的函数,模板参数T为int类型。 主要参考 cpluscplus.com 侯…

后端-编辑按钮的实现

编辑一共要实现两步: 1.点击编辑蹦出来一个弹窗,此时需要回显,根据id查出来这条数据 2.修改某些值之后点击保存的时候调用修改的接口 根据id查询的时候正常操作 修改值的时候要注意一些问题 mapper层的Employee和impl层的接收实体不一样

Spring Boot漫画之家:漫画爱好者的数字图书馆

2 系统开发环境 2.1 JAVA简介 JavaScript是一种网络脚本语言,广泛运用于web应用开发,可以用来添加网页的格式动态效果,该语言不用进行预编译就直接运行,可以直接嵌入HTML语言中,写成js语言,便于结构的分离&…

RISC-V 汇编语言

安装RISCV工具链 riscv-gnu-toolchain工具链和模拟器安装记录 - 知乎 (zhihu.com) riscv-gnu-toolchain工具链分elf-gcc、linux-gnu-gcc两个版本,以及对应的32位和64位版本。两个版本的主要区别是: riscv32-unknown-elf-gcc、riscv64-unknown-elf-gcc…

长沙市的科技查新机构有哪些

中南大学图书馆科技查新站: 中南大学图书馆科技查新站成立于2003年12月,中南大学图书馆科技查新站作为教育部首批批准的科技查新工作站之一,具备了在全国范围内开展科技查新工作的专业资质。 长沙理工大学科技查新工作站: 长沙理…

Spring Data Elasticsearch

简介说明 spring-data-elasticsearch是比较好用的一个elasticsearch客户端,本文介绍如何使用它来操作ES。本文使用spring-boot-starter-data-elasticsearch,它内部会引入spring-data-elasticsearch。 Spring Data ElasticSearch有下边这几种方法操作El…

【Web】AlpacaHack Round 7 (Web) 题解

Treasure Hunt flag在md5值拼接flagtxt的文件里,如 d/4/1/d/8/c/d/9/8/f/0/0/b/2/0/4/e/9/8/0/0/9/9/8/e/c/f/8/4/2/7/e/f/l/a/g/t/x/t 访问已经存在的目录状态码是301 访问不存在的目录状态码是404 基于此差异可以写爆破脚本 这段waf可以用url编码绕过 做个lab …

【数字电路与逻辑设计】实验五 4人表决器

文章总览:YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验五 4人表决器 一、实验内容二、设计过程(一)设置变量(二)真值表(三)表达式 三、源代码(一)代码说明&…

解决Tomcat运行时错误:“Address localhost:1099 is already in use”

目录 背景: 过程: 报错的原因: 解决的方法: 总结: 直接结束Java.exe进程: 使用neststat -aon | findstr 1099 命令: 选择建议: 背景: 准备运行Tomcat服务器调试项目时,程序下…

【C++】刷题强训(day13)--牛牛冲钻五、最长无重复字数组、重排字符串

目录 1、牛牛冲钻五 1. 题目 1.2 思路 1.3 代码实现 2、最长无重复子数组 2.1 题目 2.2 思路 2.3 程序实现 3、重排字符串 3.1 题目 3.2 思路 3.3 代码实现 刷题汇总:传送门! 1、牛牛冲钻五 1. 题目 1.2 思路 由题可知,赢一局则…

Kafka单机及集群部署及基础命令

目录 一、 Kafka介绍1、kafka定义2、传统消息队列应用场景3、kafka特点和优势4、kafka角色介绍5、分区和副本的优势6、kafka 写入消息的流程 二、Kafka单机部署1、基础环境2、iptables -L -n配置3、下载并解压kafka部署包至/usr/local/目录4、修改server.properties5、修改/etc…

在做题中学习(78):数组中第K个最大元素

解法:快速选择算法 说明:堆排序也是经典解决topK问题的算法,但时间复杂度为:O(NlogN) 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章,分别学习:数组分三块,随机选择基准…

学习记录,正则表达式, 隐式转换

正则表达式 \\:表示正则表达式 W: 表示一个非字(不是一个字,例如:空格,逗号,句号) W: 多个非字 基本组成部分 1.字符字面量: 普通字符:在正则表达式中,大…

加载内核映像文件

将kernel转换成elf文件格式,不能直接从loader直接跳转到0x100000,需要解析,提取出代码和数据出来,放到0x10000(64kb)的位置,1M的位置只是存放elf文件的位置。 4.10加载内核映像文件2 common/el…

11.27-12.5谷粒商城

目录 新增商品 1.上线会员服务 2. 获取分类关联的品牌 3.获取选定分类下的属性分组和属性 4.新增商品vo 5.保存商品信息 6.Spu检索 7.Sku商品检索 新增商品 1.上线会员服务 将会员服务注册到nacos注册中心,启用服务注册发现EnableDiscoveryClient。 同时新增…