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

Ubuntu 20.04 下 OpenCV 4.5.4 编译安装与系统默认 OpenCV 4.2 共存切换指南【2025最新版!!!】

引言

在图像处理与计算机视觉开发中,OpenCV 是不可或缺的基础库。然而,Ubuntu 20.04 默认的 APT 仓库只提供 OpenCV 4.2.0 版本,对于需要使用 OpenCV ≥ 4.5 的开发者(如 opencv-wechat-qrcode, dnn_superres, G-API 模块等)来说,系统源版本显然无法满足需求。
我在实际项目开发中也遇到了这个问题:系统自带 OpenCV 4.2 无法满足我的需求,而升级系统或使用非官方源又存在风险。因此,我选择通过源码自行编译 OpenCV 4.5.4,并实现与系统版本共存且可灵活切换。
这篇博客将完整记录我的配置流程,帮助你在 Ubuntu 20.04 下:

✅ 成功编译安装 OpenCV 4.5.4 到 /opt 等独立路径

✅ 保留系统 APT 安装的 OpenCV 4.2(不破坏原系统)

✅ 实现 C++/Python 下的 版本灵活切换

一、系统默认 OpenCV 版本问题

Ubuntu 20.04 默认通过以下命令安装 OpenCV:

sudo apt install libopencv-dev python3-opencv

对应版本:

  • C++: OpenCV 4.2.0

  • Python: cv2 绑定也是 4.2.0

这对于需要使用 4.5 及以上新功能的用户来说,限制非常大。例如:

  • cv2.dnn_superres 模块在 4.3 后才加入

  • opencv-wechat-qrcode 仅在 4.5 后可用

  • 更高版本 dnn 支持 ONNX/YOLOX 更完整

二、OpenCV 4.5.4 编译安装步骤

1、安装依赖项

sudo apt update
sudo apt install -y build-essential cmake git pkg-config \libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev \libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \libopenexr-dev libeigen3-dev libdc1394-22-dev libqt5opengl5-dev qtbase5-dev

2、下载源码(含 contrib)

mkdir -p ~/SoftWare && cd ~/SoftWare# OpenCV 主仓库
wget -O opencv-4.5.4.zip https://github.com/opencv/opencv/archive/4.5.4.zip
unzip opencv-4.5.4.zip# contrib 模块
wget -O opencv_contrib-4.5.4.zip https://github.com/opencv/opencv_contrib/archive/4.5.4.zip
unzip opencv_contrib-4.5.4.zip

3、编译配置

cd ~/SoftWare/opencv-4.5.4
mkdir build && cd build
cmake .. 
-DCMAKE_BUILD_TYPE=Release 
-DCMAKE_INSTALL_PREFIX=/opt/opencv-4.5.4 
-DOPENCV_EXTRA_MODULES_PATH=~/SoftWare/opencv_contrib-4.5.4/modules 
-DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF 
-DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_TBB=ON 
-DOPENCV_GENERATE_PKGCONFIG=ON
参数含义与用途
cmake ..使用上一级目录(源码根)为输入,生成构建配置。一般在 opencv-4.5.4/build 中执行
-DCMAKE_BUILD_TYPE=Release设置构建类型为 Release(开启编译器优化,如 -O3),通常用于生产部署而非调试
-DCMAKE_INSTALL_PREFIX=/opt/opencv-4.5.4指定安装路径(而非默认的 /usr/local),这样就能与系统 apt 安装的 OpenCV 并存
-DOPENCV_EXTRA_MODULES_PATH=~/SoftWare/opencv_contrib-4.5.4/modules添加 OpenCV Contrib 模块支持,如 xfeatures2d, aruco, sfm, viz
-DBUILD_EXAMPLES=OFF不编译 opencv/samples 中的演示示例,节省时间和磁盘空间
-DBUILD_TESTS=OFF不编译 OpenCV 内建测试(gtest),一般只有开发者才需要
-DBUILD_PERF_TESTS=OFF不编译性能测试模块,除非你要 benchmark OpenCV
-DWITH_QT=ON启用 Qt 支持(用于高质量 GUI 显示,替代原生 HighGUI)
注意:依赖 libqt5
-DWITH_OPENGL=ON启用 OpenGL 加速显示(搭配 GUI 更顺滑,支持 cv::viz, imshow 等)
-DWITH_TBB=ON启用 Intel TBB 多线程加速(如图像并行处理、滤波等)
要求系统安装 libtbb-dev
-DOPENCV_GENERATE_PKGCONFIG=ON启用 pkg-config 安装支持,可通过pkg-config --modversion opencv4查询到OpenCV的版本

4、编码安装

make -j$(nproc)
sudo make install

此时,OpenCV 4.5.4 会被完整安装到 /opt/opencv-4.5.4,不会干扰系统原生 OpenCV 4.2。

三、多版本共存与切换方法

1、配置环境变量(建议写入 ~/.bashrc)

gedit ~/.bashrc#让 CMake 中的 find_package(OpenCV) 找到 4.5.4 的配置。
export OpenCV_DIR=/opt/opencv-4.5.4 #让 CMake 优先在 /opt 查找 OpenCV 的 include 和 lib。
export CMAKE_PREFIX_PATH=/opt/opencv-4.5.4:$CMAKE_PREFIX_PATH #让 pkg-config 正确输出 4.5.4 的版本和编译参数。
export PKG_CONFIG_PATH=/opt/opencv-4.5.4/lib/pkgconfig:$PKG_CONFIG_PATH#运行 C++ 可执行程序时能正确加载 4.5.4.so 动态库。
export LD_LIBRARY_PATH=/opt/opencv-4.5.4/lib:$LD_LIBRARY_PATH#让 Python 3.8 能找到你自己编译的 cv2.so。
(可选)export PYTHONPATH=/opt/opencv-4.5.4/lib/python3.8/dist-packages/cv2/python-3.8:$PYTHONPATH

然后:

source ~/.bashrc

2、检察当前使用的版本

# C++ 编译器版本确认
pkg-config --modversion opencv4   # 输出:4.5.4
🔍 作用:
查询当前系统中 C++ 编译时使用的 OpenCV 版本(通过 pkg-config 机制)。📚 原理:
pkg-config 是 C/C++ 编译工具链中的一个工具,它根据 .pc 文件提供库的头文件路径、库路径、依赖等信息。它找的文件是:opencv4.pc,路径一般在:
/usr/lib/pkgconfig/opencv4.pc           # apt 安装版本
/opt/opencv-4.5.4/lib/pkgconfig/opencv4.pc   # 手动安装版本
需要设置好环境变量 PKG_CONFIG_PATH 才能切换版本。
✅ 用法示例:
pkg-config --modversion opencv4          # 查询版本
pkg-config --cflags opencv4              # 查询头文件路径
pkg-config --libs opencv4                # 查询链接库
💡 应用场景:
编写或编译 C++ 项目(例如 CMake/Makefile)时判断当前使用的 OpenCV 版本。
在多版本共存时,用来检测 pkg-config 实际解析的是哪个版本。# Python
python3 -c "import cv2; print(cv2.__version__)"  # 应输出 4.5.4
🔍 作用:
查看当前 Python 解释器中实际导入的 OpenCV(cv2 模块)的版本。📚 原理:
Python 使用的是 cv2 模块(通常为 cv2.cpython-3X-xxx.so 文件)。
模块所在路径由 sys.path 决定,而 PYTHONPATH 变量可以控制它的优先级。
如果你系统中装了多个 cv2,Python 会根据路径顺序选择导入。✅ 用法示例:
python3 -c "import cv2; print(cv2.__version__)"    # 打印版本
python3 -c "import cv2; print(cv2.__file__)"       # 查看使用的是哪个路径下的 cv2
💡 应用场景:
验证当前 Python 环境中的 OpenCV 是否为自定义版本(例如你手动编译的 4.5.4)。
检查虚拟环境或系统环境中的 cv2 模块来源。
解决 Python cv2 导入失败或版本不一致的问题。
特性pkg-config --modversion opencv4python3 -c "import cv2"
面向语言C++Python
获取来源.pc 文件(OpenCV C++ 安装配置)cv2.so 模块(Python 模块路径)
与谁相关CMake/Makefile/ROS 等Python 脚本/深度学习训练/推理
依赖环境变量PKG_CONFIG_PATHPYTHONPATH, sys.path
切换版本方式通过 .pc 和环境变量切换通过 PYTHONPATHpip 安装控制
检查用途编译链接库版本检测Python 模块是否是你想用的版本

检察结果如下:

在这里插入图片描述

3、切换回系统默认版本

如果你想切回系统 OpenCV 4.2,只需:

将上述添加的环境变量注释掉即可

在这里插入图片描述
然后可以查询到:
在这里插入图片描述

四、多版本共存实用技巧

使用场景推荐方式
使用 apt 默认版本(OpenCV 4.2)不设置任何环境变量
使用自编译版本(OpenCV 4.5.4)设置 PKG_CONFIG_PATH, LD_LIBRARY_PATH, PYTHONPATH
编译其他项目(如 SIBR, ROS)CMakeLists.txt 中设置 CMAKE_PREFIX_PATH=/opt/opencv-4.5.4
Python 快速测试 cv2 版本安装 pip 包或设置 PYTHONPATH

五、总结

在 Ubuntu 20.04 上,系统默认 OpenCV 版本偏旧,而很多项目需要 4.5+ 才能使用新特性。通过本文的方法,你可以:

✅ 安装最新 OpenCV 版本

✅ 不破坏系统环境

✅ 支持 C++/Python 多版本自由切换

对于长期在Ubuntu 20.04进行开发,而不想升级系统版本的小伙伴,希望这篇文章能帮你少踩坑,感兴趣的同学欢迎评论区讨论!

http://www.xdnf.cn/news/671851.html

相关文章:

  • Elasticsearch创建快照仓库报错处理
  • 嵌入式学习--江协stm32day3
  • 阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF
  • 基于递归思想的系统架构图自动化生成实践
  • VMware-MySQL主从
  • AI提示工程(Prompt Engineering)高级技巧详解
  • 【大模型实战篇】BGE-Rerank-base重排服务部署教程
  • AI前端开发岗位面试准备指南
  • 什么是数据驱动?以及我们应如何理解数据驱动?
  • 什么是可重组机器人?
  • 33. 自动化测试开发之使用mysql异步连接池实现mysql数据库操作
  • 前端域名、端口、协议一样,本地缓存可以共享吗?
  • 【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 - 2信息采集
  • Protocol Buffers 复杂嵌套编译指南:生成 C++ 代码
  • JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面
  • 开源酷炫大数据可视化大屏html+eacher 100+套
  • 力扣热题——分类求和并作差
  • Vue-02 (使用不同的 Vue CLI 插件)
  • 从 PyTorch 到 TensorFlow Lite:模型训练与推理
  • 【华为云物联网】iOtDA数据以表格字段转发OBS的设置攻略,便于以后数据上大屏
  • 如何描述BUG
  • VUE项目部署IIS服务器手册
  • 机器学习笔记【Week6】
  • 打板策略实战对比,khQuant回测横评第三弹【AI量化第29篇】
  • Nginx 在四大核心场景中的应用实践与优化
  • 深入解析 Flink 中的时间与窗口机制
  • 安卓证书的申请(保姆级图文)
  • Python服务器请求转发服务
  • KT6368A通过蓝牙芯片获取手机时间详细说明,对应串口指令举例
  • ubuntu中,c和c+程序,预编译、编译、链接和运行命令