通过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
-
若弹出图片窗口,且执行以下命令能看到高版本:
bashpkg-config --modversion opencv4 # 输出:4.10.0(与你编译的版本一致)说明 C++ 高版本安装成功。
四、关键注意事项(避免版本冲突)
- 不要混合使用 APT 和源码编译 :APT 安装的是低版本,源码编译是高版本,若不卸载 APT 版本,可能导致
pkg-config优先链接低版本,编译失败。 - Python 版本优先用 pip 管理 :避免同时用
apt install python3-opencv和pip install opencv-python,两者版本可能不一致,导入时会优先使用pip安装的版本(但建议只保留一种)。 - 若需切换版本 :
- Python:用
pip3 install opencv-python==指定版本切换。 - C++:若需多个版本,可在 CMake 时指定
CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.10,然后通过update-alternatives管理链接(进阶操作,新手无需)。
- Python:用
五、常见问题排查
-
C++ 编译时仍链接旧版本 :
-
执行
sudo ldconfig刷新库缓存。 -
检查
pkg-config --cflags --libs opencv4的输出,若路径指向/usr/lib(APT 旧版本路径),执行:bashsudo rm -rf /usr/lib/x86_64-linux-gnu/libopencv* # 清理旧库残留(谨慎!确保已卸载 APT 版本) sudo ldconfig
-
-
Python 导入仍显示低版本 :
- 检查是否有多个 Python 环境(如 Anaconda、虚拟环境),确保在目标环境中执行
pip install。 - 执行
which python3和pip3 show opencv-python | grep Location,确认 Python 解释器和安装路径一致。
- 检查是否有多个 Python 环境(如 Anaconda、虚拟环境),确保在目标环境中执行
按以上步骤操作,即可彻底替换低版本 OpenCV,安装并使用高版本,且避免后续冲突。