细致指南:在 Ubuntu 20.04 中源码编译安装 OpenCV 并举行全面配置,包罗多版本共存与切换
本文档旨在为开发者提供在 Ubuntu 20.04 体系中通过源码编译安装 OpenCV 的详细步调,并涵盖后续的各项配置,包罗 pkg-config 环境、体系环境变量配置、动态库环境配置,以及实现 OpenCV 多版本(以 OpenCV 3.2 和 OpenCV 4.4 为例)的共存与切换。以下内容将以专业、严谨且逻辑清楚的方式展开,辅以具体实例以助理解和操作。
目录
- 前置条件与依靠安装
- 下载 OpenCV 源代码
- 编译并安装 OpenCV
- 配置 pkg-config 环境
- 配置体系环境变量
- 配置动态链接库
- 实现 OpenCV 多版本共存与切换
- 实例演示
- 总结
1. 前置条件与依靠安装
在开始之前,确保您的 Ubuntu 20.04 体系已更新并安装了必要的编译工具和依靠库。
1.1 更新体系
- sudo apt update
- sudo apt upgrade -y
复制代码 1.2 安装编译工具与依靠库
OpenCV 的编译必要多个依靠库,以下下令将安装常用的依靠:
- sudo apt install -y build-essential cmake git pkg-config \
- libjpeg-dev libpng-dev libtiff-dev \
- libavcodec-dev libavformat-dev libswscale-dev \
- libv4l-dev libxvidcore-dev libx264-dev \
- libgtk-3-dev libatlas-base-dev gfortran \
- python3-dev
复制代码 1.3 安装可选依靠
根据必要,您可以安装额外的模块,如 OpenGL 支持、FFmpeg 等:
- sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
复制代码 2. 下载 OpenCV 源代码
为了实现多版本共存,发起将差别版本的 OpenCV 源代码分别克隆到差别的目录中。
2.1 创建工作目录
- mkdir -p ~/opencv_builds
- cd ~/opencv_builds
复制代码 2.2 克隆 OpenCV 主堆栈与 opencv_contrib 堆栈
克隆 OpenCV 3.2
- git clone https://github.com/opencv/opencv.git opencv-3.2
- cd opencv-3.2
- git checkout 3.2.0
- cd ..
复制代码 克隆 OpenCV 4.4
- git clone https://github.com/opencv/opencv.git opencv-4.4
- cd opencv-4.4
- git checkout 4.4.0
- cd ..
复制代码 克隆 opencv_contrib 堆栈
opencv_contrib 包含额外的模块,需与对应版本的 OpenCV 配套使用。
对于 OpenCV 3.2
- git clone https://github.com/opencv/opencv_contrib.git opencv_contrib-3.2
- cd opencv_contrib-3.2
- git checkout 3.2.0
- cd ..
复制代码 对于 OpenCV 4.4
- git clone https://github.com/opencv/opencv_contrib.git opencv_contrib-4.4
- cd opencv_contrib-4.4
- git checkout 4.4.0
- cd ..
复制代码 3. 编译并安装 OpenCV
为每个版本的 OpenCV 单独创建构建目录并编译安装,以实现多版本共存。
3.1 编译安装 OpenCV 3.2
3.1.1 创建构建目录
- cd ~/opencv_builds/opencv-3.2
- mkdir build && cd build
复制代码 3.1.2 配置 CMake
- cmake -D CMAKE_BUILD_TYPE=Release \
- -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-3.2.0 \
- -D OPENCV_EXTRA_MODULES_PATH=~/opencv_builds/opencv_contrib-3.2.0/modules \
- -D BUILD_EXAMPLES=ON \
- -D ENABLE_PRECOMPILED_HEADERS=OFF ..
复制代码 参数分析:
- CMAKE_BUILD_TYPE=Release:编译为优化后的发布版本。
- CMAKE_INSTALL_PREFIX=/usr/local/opencv-3.2:指定安装路径,以便与其他版本隔离。
- OPENCV_EXTRA_MODULES_PATH:指定 opencv_contrib 模块路径。
- BUILD_EXAMPLES=ON:编译示例代码(可选)。
3.1.3 编译并安装
- make -j$(nproc)
- sudo make install
复制代码 3.2 编译安装 OpenCV 4.4
3.2.1 创建构建目录
- cd ~/opencv_builds/opencv-4.4
- mkdir build && cd build
复制代码 3.2.2 配置 CMake
- cmake -D CMAKE_BUILD_TYPE=Release \
- -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.4.0 \
- -D OPENCV_EXTRA_MODULES_PATH=~/opencv_builds/opencv_contrib-4.4.0/modules \
- -D OPENCV_GENERATE_PKGCONFIG=YES \
- -D BUILD_EXAMPLES=ON ..
复制代码 3.2.3 编译并安装
- make -j$(nproc)
- sudo make install
复制代码 4. 配置 pkg-config 环境
pkg-config 是一个用于管理编译时库依靠的工具。配置 pkg-config 可以大概帮助编译器和链接器找到 OpenCV 库。
4.1 确认 pkg-config 安装
- sudo apt install -y pkg-config
复制代码 4.2 设置 PKG_CONFIG_PATH
必要将每个 OpenCV 版本的 .pc 文件路径添加到 PKG_CONFIG_PATH 环境变量中。
4.2.1 编辑 Shell 配置文件
使用您常用的文本编辑器(如 nano)编辑 ~/.bashrc 或 ~/.zshrc 文件:
4.2.2 添加 OpenCV 3.2 的 pkg-config 路径
- # OpenCV 3.2 pkg-config path
- export PKG_CONFIG_PATH=/usr/local/opencv-3.2/lib
- /pkgconfig:$PKG_CONFIG_PATH
复制代码 4.2.3 添加 OpenCV 4.4 的 pkg-config 路径
- # OpenCV 4.4 pkg-config path
- export PKG_CONFIG_PATH=/usr/local/opencv-4.4/lib
- /pkgconfig:$PKG_CONFIG_PATH
复制代码 4.2.4 应用更改
保存并关闭编辑器后,执行以下下令以应用更改:
4.3 验证 pkg-config 配置
验证 OpenCV 3.2:
- pkg-config --modversion opencv
复制代码 输出应为 3.2.0。
验证 OpenCV 4.4:
- pkg-config --modversion opencv
- 4
复制代码 输出应为 4.4.0。
5. 配置体系环境变量
配置体系环境变量确保体系可以大概在运行时找到 OpenCV 库和头文件。
5.1 设置环境变量
继续编辑 ~/.bashrc 或 ~/.zshrc 文件:
5.2 添加 OpenCV 3.2 和 4.4 的环境变量
- # OpenCV 3.2 environment variables
- export OpenCV3_DIR=/usr/local/opencv-3.2
- export PATH=$OpenCV3_DIR/bin:$PATH
- export LD_LIBRARY_PATH=$OpenCV3_DIR/lib:$LD_LIBRARY_PATH
- export CPLUS_INCLUDE_PATH=$OpenCV3_DIR/include:$CPLUS_INCLUDE_PATH
- # OpenCV 4.4 environment variables
- export OpenCV4_DIR=/usr/local/opencv-4.4
- export PATH=$OpenCV4_DIR/bin:$PATH
- export LD_LIBRARY_PATH=$OpenCV4_DIR/lib:$LD_LIBRARY_PATH
- export CPLUS_INCLUDE_PATH=$OpenCV4_DIR/include:$CPLUS_INCLUDE_PATH
复制代码 5.3 应用更改
5.4 验证环境变量
检查环境变量是否正确配置:
- echo $PATH
- echo $LD_LIBRARY_PATH
- echo $CPLUS_INCLUDE_PATH
复制代码 确保 /usr/local/opencv-3.2/bin 和 /usr/local/opencv-4.4/bin 在 PATH 中,且相应的 lib 和 include 路径在 LD_LIBRARY_PATH 和 CPLUS_INCLUDE_PATH 中。
6. 配置动态链接库
配置动态链接库确保运行时能找到正确的 OpenCV 版本。
6.1 创建配置文件
为每个 OpenCV 版本创建一个单独的配置文件,以便体系动态链接库可以正确辨认。
6.1.1 OpenCV 3.2
创建 /etc/ld.so.conf.d/opencv3.conf 文件:
- sudo nano /etc/ld.so.conf.d/opencv3.conf
复制代码 添加以下内容:
- /usr/local/opencv-3.2/lib
复制代码 6.1.2 OpenCV 4.4
创建 /etc/ld.so.conf.d/opencv4.conf 文件:
- sudo nano /etc/ld.so.conf.d/opencv4.conf
复制代码 添加以下内容:
- /usr/local/opencv-4.4/lib
复制代码 6.2 更新动态链接库缓存
6.3 验证动态链接库配置
使用 ldconfig 检察库是否被正确辨认:
- ldconfig -p | grep opencv
复制代码 应表现 OpenCV 3.2 和 4.4 的库路径。
7. 实现 OpenCV 多版本共存与切换
为了实现 OpenCV 3.2 和 4.4 的共存与切换,必要合理配置环境变量和使用差别的编译选项。
7.1 使用环境变量切换版本
通过设置环境变量,可以在差别的终端会话中使用差别的 OpenCV 版本。
7.1.1 切换到 OpenCV 3.2
在终端中执行:
- export PATH=/usr/local/opencv-3.2/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/opencv-3.2/lib
- :$LD_LIBRARY_PATHexport PKG_CONFIG_PATH=/usr/local/opencv-3.2/lib
- /pkgconfig:$PKG_CONFIG_PATH
复制代码 7.1.2 切换到 OpenCV 4.4
在终端中执行:
- export PATH=/usr/local/opencv-4.4/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/opencv-4.4/lib
- :$LD_LIBRARY_PATHexport PKG_CONFIG_PATH=/usr/local/opencv-4.4/lib
- /pkgconfig:$PKG_CONFIG_PATH
复制代码 7.2 使用 update-alternatives 管理多个版本
update-alternatives 是一个用于管理多个同类步伐的工具,可以用来切换差别的 OpenCV 版本。
7.2.1 注册 OpenCV 3.2 和 4.4 到 update-alternatives
注册 opencv_version
- sudo update-alternatives --install /usr/bin/opencv_version
- opencv_version
- /usr/local/opencv-3.2/bin/opencv_version
- 32
- sudo update-alternatives --install /usr/bin/opencv_version
- opencv_version
- /usr/local/opencv-4.4/bin/opencv_version
- 44
复制代码 注册其他可执行文件(如有)
根据必要,注册其他 OpenCV 可执行文件:
- sudo update-alternatives --install /usr/bin/opencv_interactive-calibration opencv_interactive-calibration /usr/local/opencv-3.2/bin/opencv_interactive-calibration 32
- sudo update-alternatives --install /usr/bin/opencv_interactive-calibration opencv_interactive-calibration /usr/local/opencv-4.4/bin/opencv_interactive-calibration 44
- # 重复以上步骤为其他可执行文件注册
复制代码 7.2.2 切换 OpenCV 版本
使用以下下令选择默认版本:
- sudo update-alternatives --config opencv_version
复制代码 体系将表现可用版本,输入对应的编号选择。
7.2.3 验证切换结果
应表现选择的 OpenCV 版本号。
7.3 使用 CMake 配置差别版本
在编译项目时,可以通过 pkg-config 或手动指定 OpenCV 路径来选择差别版本。
7.3.1 使用 pkg-config
在项目的 CMakeLists.txt 中使用 pkg-config:
- find_package(PkgConfig REQUIRED)
- pkg_check_modules(OPENCV REQUIRED opencv4) # 或 opencv
- include_directories(${OPENCV_INCLUDE_DIRS})
- link_directories(${OPENCV_LIBRARY_DIRS})
- add_executable(my_app main.cpp)
- target_link_libraries(my_app ${OPENCV_LIBRARIES})
复制代码 通过切换 PKG_CONFIG_PATH 环境变量,可以选择差别版本的 OpenCV。
7.3.2 手动指定 OpenCV 路径
在 CMake 配置下令中手动指定 OpenCV 路径:
- # 使用 OpenCV 3.2cmake -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_INSTALL_PREFIX=/usr/local/my_project \ -D OpenCV_DIR=/usr/local/opencv-3.2/lib
- /cmake/opencv4 \ ..# 使用 OpenCV 4.4cmake -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_INSTALL_PREFIX=/usr/local/my_project \ -D OpenCV_DIR=/usr/local/opencv-4.4/lib
- /cmake/opencv4 \ ..
复制代码 8. 实例演示
以下将通过一个具体的实例,展示如何编译一个使用 OpenCV 3.2 和 OpenCV 4.4 的简单 C++ 步伐,并在差别版本之间切换。
8.1 创建示例步伐
创建一个名为 main.cpp 的简单步伐,加载并表现一张图片:
- #include <opencv2/opencv.hpp>
- #include <iostream>
- int main() {
- cv::Mat image = cv::imread("example.jpg", cv::IMREAD_COLOR);
- if (image.empty()) {
- std::cerr << "Could not open or find the image." << std::endl;
- return -1;
- }
- cv::imshow("Display window", image);
- cv::waitKey(0);
- return 0;
- }
复制代码 确保当前目录中有一张名为 example.jpg 的图片。
8.2 编译并运利用用 OpenCV 3.2
8.2.1 设置环境变量为 OpenCV 3.2
- export PATH=/usr/local/opencv-3.2/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/opencv-3.2/lib
- :$LD_LIBRARY_PATHexport PKG_CONFIG_PATH=/usr/local/opencv-3.2/lib
- /pkgconfig:$PKG_CONFIG_PATH
复制代码 8.2.2 编译步伐
- g++ main.cpp $(pkg-config --cflags --libs opencv) -o main_opencv3
复制代码 8.2.3 运行步伐
应表现加载的图片,且通过 opencv_version
下令确认版本为 3.2:
- opencv_version
- # 输出: 3.2.0
复制代码 8.3 编译并运利用用 OpenCV 4.4
8.3.1 设置环境变量为 OpenCV 4.4
- export PATH=/usr/local/opencv-4.4/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/opencv-4.4/lib
- :$LD_LIBRARY_PATHexport PKG_CONFIG_PATH=/usr/local/opencv-4.4/lib
- /pkgconfig:$PKG_CONFIG_PATH
复制代码 8.3.2 编译步伐
- g++ main.cpp $(pkg-config --cflags --libs opencv4) -o main_opencv4
复制代码 8.3.3 运行步伐
应表现加载的图片,且通过 opencv_version
下令确认版本为 4.4:
- opencv_version
- # 输出: 4.4.0
复制代码 8.4 使用 update-alternatives 切换版本
假设已按照前述步调注册 opencv_version
,可通过 update-alternatives 轻松切换默认版本。
8.4.1 切换到 OpenCV 3.2
- sudo update-alternatives --config opencv_version
- # 选择对应 OpenCV 3.2 的编号
复制代码 验证版本:
- opencv_version
- # 输出: 3.2.0
复制代码 8.4.2 切换到 OpenCV 4.4
- sudo update-alternatives --config opencv_version
- # 选择对应 OpenCV 4.4 的编号
复制代码 验证版本:
- opencv_version
- # 输出: 4.4.0
复制代码 9. 总结
通过本文的详细步调,您已成功在 Ubuntu 20.04 体系中通过源码编译安装了 OpenCV 3.2 和 OpenCV 4.4,并实现了多版本的共存与切换。以下是关键点的总结:
- 源码编译与安装:通过源码编译可自定义安装路径,实现多版本共存。
- 环境变量配置:正确设置 PKG_CONFIG_PATH、LD_LIBRARY_PATH 和 CPLUS_INCLUDE_PATH 确保编译器和运行时环境能找到相应的库和头文件。
- 动态链接库配置:通过 /etc/ld.so.conf.d/ 添加库路径,并运行 ldconfig 更新缓存,确保运行时能正确加载库。
- 多版本管理:使用 update-alternatives 和环境变量切换差别版本的 OpenCV,满足差别项目需求。
通过这种方式,您可以灵活地在同一体系中管理和使用多个 OpenCV 版本,确保项目的兼容性和开发效率。
注意事项:
- 权限管理:编译和安装过程必要管理员权限,确保使用 sudo 执行必要的下令。
- 版本兼容性:差别版本的 OpenCV 大概在 API 和功能上有所差别,切换版本后需确保项目代码与所用版本兼容。
- 依靠库冲突:安装多版本 OpenCV 时,需注意依靠库的版本兼容性,制止引入冲突。
- 清理残留文件:如需卸载某一版本的 OpenCV,需手动删除对应的安装路径下的文件,并更新环境变量和动态链接库缓存。
通过严格遵循本文档的步调,您将可以大概在 Ubuntu 20.04 体系中高效、灵活地管理 OpenCV 的多个版本,并为复杂的计算机视觉项目提供坚实的底子。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |