当前位置: 首页 > news >正文

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.lryc.cn/news/499961.html

相关文章:

  • 【Unity高级】在编辑器中如何让物体围绕一个点旋转固定角度
  • 2024.11.29——[HCTF 2018]WarmUp 1
  • AGameModeBase和游戏模式方法
  • Swift 扩展
  • 【NebulaGraph】官方查询语言nGQL教程1 (四)
  • 阿里云负载均衡SLB实践
  • 鸿蒙技术分享:❓❓[鸿蒙应用开发]怎么更好的管理模块生命周期?
  • 深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(上)
  • LabVIEW气缸摩擦力测试系统
  • Leetcode. 688骑士在棋盘上的概率
  • TCP/IP 协议栈高效可靠的数据传输机制——以 Linux 4.19 内核为例
  • Ubuntu22.04搭建LAMP环境(linux服务器学习笔记)
  • 鸿蒙面试---1208
  • java基础教程第16篇( 正则表达式)
  • Docker部署的gitlab升级的详细步骤(升级到17.6.1版本)
  • 【如何制定虚拟货币的补仓策略并计算回本和盈利】
  • 给图像去除水印攻
  • Linux之封装线程库和线程的互斥
  • PH热榜 | 2024-12-08
  • LeetCode刷题day20——贪心
  • CCF编程能力等级认证GESP—C++3级—20241207
  • Microi 吾码:大数据浪潮中的智能领航者
  • Lua语言入门 - Lua 数组
  • gulp应该怎么用,前端批量自动化替换文件
  • 石岩湿地公园的停车场收费情况
  • A7157 基于Java+SSM+mysql+jsp的医院挂号系统的设计与实现 源码 文档 配置 全套资料
  • 数据处理与统计分析——11-Pandas-Seaborn可视化
  • 【计算机网络】实验13:运输层端口
  • STL之适配器(adapters)_下
  • 基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)