Ubuntu安装的OpenCV如何更换版本

通过APT 安装的opencv版本比较低,需要安装更高版本。这个时候有疑问了,那需要卸载已安装的低版本,再安装新的高版本吗?

是的,需要分情况处理

  • 「Python 版本 OpenCV」:无需卸载低版本,可直接安装高版本(会自动覆盖或并行共存,通过 pip 管理版本);
  • 「C++ 版本 OpenCV」:建议先卸载 APT 安装的低版本(避免头文件、库文件冲突),再通过「源码编译」安装高版本(APT 无更高版本)。

下面是具体操作步骤,兼顾"彻底性"和"避免冲突":

一、先处理已安装的低版本(分 Python/C++)

1. 卸载 Python 低版本(可选,推荐清理)

APT 安装的 Python OpenCV 可能是 python3-opencv(系统自带低版本),而你之前用 pip3 安装的 opencv-python 是另一个渠道,两者可能并存导致版本混乱。建议先清理:

bash 复制代码
# 1. 卸载 APT 安装的 Python OpenCV(若安装过)
sudo apt remove -y python3-opencv

# 2. 卸载 pip 安装的低版本 opencv-python(若已安装)
pip3 uninstall -y opencv-python opencv-contrib-python
  • 说明:Python 版本支持"覆盖安装",即使不卸载,直接装高版本也会替换,但清理后更干净,避免后续导入时混淆版本。

2. 卸载 C++ 低版本(必须,避免冲突)

APT 安装的 libopencv-dev(C++ 开发库)会在系统目录(/usr/include/usr/lib)留下头文件和库文件,若直接源码编译安装高版本,会导致文件冲突(编译时可能链接到旧版本库)。

卸载命令:

bash 复制代码
# 卸载 APT 安装的 C++ OpenCV 核心库
sudo apt remove -y libopencv-dev

# 清理残留依赖(可选,推荐)
sudo apt autoremove -y

验证卸载是否干净:

bash 复制代码
# 检查是否还有 OpenCV 头文件(若输出空,说明已清理)
ls /usr/include/opencv4  # APT 安装的头文件默认在这
# 检查是否还有 OpenCV 库文件(若输出空或无 opencv 相关,说明已清理)
ls /usr/lib/x86_64-linux-gnu | grep opencv

二、安装高版本 OpenCV(Python + C++ 都要高版本)

1. Python 高版本:直接用 pip 安装(最简单)

pip 仓库提供 OpenCV 最新稳定版(如 4.10.0、4.9.0 等),直接指定版本安装即可:

bash 复制代码
# 安装最新稳定版(推荐)
pip3 install opencv-python==4.10.0.84 opencv-contrib-python==4.10.0.84

# 若想安装最新预览版(谨慎使用,可能有bug)
# pip3 install opencv-python --pre
  • 版本查询:可通过 PyPI 官网 查看所有可用版本。
  • 验证:安装后执行 python3 -c "import cv2; print(cv2.__version__)",应输出版本号(如 4.10.0.84)。

2. C++ 高版本:源码编译(唯一方式,APT 无高版本)

参考之前的"方式2 源码编译",但补充「指定高版本」和「避免冲突」的关键步骤:

步骤1:下载指定高版本源码(以 4.10.0 为例,最新稳定版)
bash 复制代码
# 若之前有旧源码目录,可删除重建(避免残留)
rm -rf ~/opencv_build && mkdir -p ~/opencv_build && cd ~/opencv_build

# 下载 OpenCV 核心源码(指定 4.10.0 版本,可替换为更高版)
git clone --depth 1 --branch 4.10.0 https://github.com/opencv/opencv.git

# 下载额外模块(可选,如特征检测、跟踪等,版本需与核心一致)
git clone --depth 1 --branch 4.10.0 https://github.com/opencv/opencv_contrib.git
步骤2:CMake 配置(关键:指定安装路径,避免冲突)
bash 复制代码
mkdir -p opencv/build && cd opencv/build

cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local  # 默认系统级安装路径(推荐)
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D BUILD_EXAMPLES=ON \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_OPENMP=ON  # 启用多线程加速(可选)
..
  • 说明:CMAKE_INSTALL_PREFIX=/usr/local 是默认系统级路径,后续编译 C++ 程序时,pkg-config 能自动找到高版本库。
步骤3:编译与安装
bash 复制代码
# 编译(-j 后接 CPU 核心数,加速编译,查看核心数:nproc)
make -j$(nproc)

# 安装到系统(覆盖旧版本残留,若有)
sudo make install

# 更新库缓存(必须,让系统识别新安装的库)
sudo ldconfig

三、验证高版本是否生效

1. Python 验证

bash 复制代码
python3 -c "import cv2; print('Python OpenCV 版本:', cv2.__version__)"
# 输出:Python OpenCV 版本:4.10.0.84(或你安装的高版本)

2. C++ 验证

用之前的 test_opencv.cpp 重新编译,查看链接的版本:

bash 复制代码
# 编译(确保 pkg-config 指向高版本)
g++ test_opencv.cpp -o test_opencv `pkg-config --cflags --libs opencv4`

# 运行(需准备一张测试图)
./test_opencv test.jpg
  • 若弹出图片窗口,且执行以下命令能看到高版本:

    bash 复制代码
    pkg-config --modversion opencv4
    # 输出:4.10.0(与你编译的版本一致)

    说明 C++ 高版本安装成功。

四、关键注意事项(避免版本冲突)

  1. 不要混合使用 APT 和源码编译 :APT 安装的是低版本,源码编译是高版本,若不卸载 APT 版本,可能导致 pkg-config 优先链接低版本,编译失败。
  2. Python 版本优先用 pip 管理 :避免同时用 apt install python3-opencvpip install opencv-python,两者版本可能不一致,导入时会优先使用 pip 安装的版本(但建议只保留一种)。
  3. 若需切换版本
    • Python:用 pip3 install opencv-python==指定版本 切换。
    • C++:若需多个版本,可在 CMake 时指定 CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.10,然后通过 update-alternatives 管理链接(进阶操作,新手无需)。

五、常见问题排查

  1. C++ 编译时仍链接旧版本

    • 执行 sudo ldconfig 刷新库缓存。

    • 检查 pkg-config --cflags --libs opencv4 的输出,若路径指向 /usr/lib(APT 旧版本路径),执行:

      bash 复制代码
      sudo rm -rf /usr/lib/x86_64-linux-gnu/libopencv*  # 清理旧库残留(谨慎!确保已卸载 APT 版本)
      sudo ldconfig
  2. Python 导入仍显示低版本

    • 检查是否有多个 Python 环境(如 Anaconda、虚拟环境),确保在目标环境中执行 pip install
    • 执行 which python3pip3 show opencv-python | grep Location,确认 Python 解释器和安装路径一致。

按以上步骤操作,即可彻底替换低版本 OpenCV,安装并使用高版本,且避免后续冲突。

相关推荐
m0_528749002 小时前
C语言错误处理宏两个比较重要的
java·linux·算法
Jia ming2 小时前
Linux性能分析工具perf全面解析
linux·性能优化·perf
珠穆峰2 小时前
linux find 命令使用
linux·运维·服务器
JinchuanMaster3 小时前
Ubuntu20.04安装50系显卡驱动[不黑屏版本]
linux·人工智能·深度学习·ubuntu·机器学习·机器人·gpu算力
草莓熊Lotso3 小时前
Linux 程序地址空间深度解析:虚拟地址背后的真相
java·linux·运维·服务器·开发语言·c++·人工智能
郝学胜-神的一滴3 小时前
使用Linux命名管道(FIFO)实现无血缘关系进程间通信
linux·服务器·开发语言·c++·程序人生
Jinkxs3 小时前
【Linux】零基础入门:一篇吃透操作系统核心概念
linux·运维·服务器·网络·操作系统
一目Leizi3 小时前
Windows 系统下安装 Ubuntu 双系统详细教程(图文指南)
linux·windows·ubuntu