细致指南:在 Ubuntu 20.04 中源码编译安装 OpenCV 并举行全面配置,包罗多 ...

打印 上一主题 下一主题

主题 893|帖子 893|积分 2679

细致指南:在 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 更新体系

  1. sudo apt update
  2. sudo apt upgrade -y
复制代码
1.2 安装编译工具与依靠库

OpenCV 的编译必要多个依靠库,以下下令将安装常用的依靠:
  1. sudo apt install -y build-essential cmake git pkg-config \
  2. libjpeg-dev libpng-dev libtiff-dev \
  3. libavcodec-dev libavformat-dev libswscale-dev \
  4. libv4l-dev libxvidcore-dev libx264-dev \
  5. libgtk-3-dev libatlas-base-dev gfortran \
  6. python3-dev
复制代码
1.3 安装可选依靠

根据必要,您可以安装额外的模块,如 OpenGL 支持、FFmpeg 等:
  1. sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
复制代码
2. 下载 OpenCV 源代码

为了实现多版本共存,发起将差别版本的 OpenCV 源代码分别克隆到差别的目录中。
2.1 创建工作目录

  1. mkdir -p ~/opencv_builds
  2. cd ~/opencv_builds
复制代码
2.2 克隆 OpenCV 主堆栈与 opencv_contrib 堆栈

克隆 OpenCV 3.2

  1. git clone https://github.com/opencv/opencv.git opencv-3.2
  2. cd opencv-3.2
  3. git checkout 3.2.0
  4. cd ..
复制代码
克隆 OpenCV 4.4

  1. git clone https://github.com/opencv/opencv.git opencv-4.4
  2. cd opencv-4.4
  3. git checkout 4.4.0
  4. cd ..
复制代码
克隆 opencv_contrib 堆栈

opencv_contrib 包含额外的模块,需与对应版本的 OpenCV 配套使用。
对于 OpenCV 3.2

  1. git clone https://github.com/opencv/opencv_contrib.git opencv_contrib-3.2
  2. cd opencv_contrib-3.2
  3. git checkout 3.2.0
  4. cd ..
复制代码
对于 OpenCV 4.4

  1. git clone https://github.com/opencv/opencv_contrib.git opencv_contrib-4.4
  2. cd opencv_contrib-4.4
  3. git checkout 4.4.0
  4. cd ..
复制代码
3. 编译并安装 OpenCV

为每个版本的 OpenCV 单独创建构建目录并编译安装,以实现多版本共存。
3.1 编译安装 OpenCV 3.2

3.1.1 创建构建目录

  1. cd ~/opencv_builds/opencv-3.2
  2. mkdir build && cd build
复制代码
3.1.2 配置 CMake

  1. cmake -D CMAKE_BUILD_TYPE=Release \
  2.       -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-3.2.0 \
  3.       -D OPENCV_EXTRA_MODULES_PATH=~/opencv_builds/opencv_contrib-3.2.0/modules \
  4.       -D BUILD_EXAMPLES=ON \
  5.       -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 编译并安装

  1. make -j$(nproc)
  2. sudo make install
复制代码
3.2 编译安装 OpenCV 4.4

3.2.1 创建构建目录

  1. cd ~/opencv_builds/opencv-4.4
  2. mkdir build && cd build
复制代码
3.2.2 配置 CMake

  1. cmake -D CMAKE_BUILD_TYPE=Release \
  2.       -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.4.0 \
  3.       -D OPENCV_EXTRA_MODULES_PATH=~/opencv_builds/opencv_contrib-4.4.0/modules \
  4.       -D OPENCV_GENERATE_PKGCONFIG=YES \
  5.       -D BUILD_EXAMPLES=ON ..
复制代码
3.2.3 编译并安装

  1. make -j$(nproc)
  2. sudo make install
复制代码
4. 配置 pkg-config 环境

pkg-config 是一个用于管理编译时库依靠的工具。配置 pkg-config 可以大概帮助编译器和链接器找到 OpenCV 库。
4.1 确认 pkg-config 安装

  1. sudo apt install -y pkg-config
复制代码
4.2 设置 PKG_CONFIG_PATH

必要将每个 OpenCV 版本的 .pc 文件路径添加到 PKG_CONFIG_PATH 环境变量中。
4.2.1 编辑 Shell 配置文件

使用您常用的文本编辑器(如 nano)编辑 ~/.bashrc 或 ~/.zshrc 文件:
  1. nano ~/.bashrc
复制代码
4.2.2 添加 OpenCV 3.2 的 pkg-config 路径

  1. # OpenCV 3.2 pkg-config path
  2. export PKG_CONFIG_PATH=/usr/local/opencv-3.2/lib
  3. /pkgconfig:$PKG_CONFIG_PATH
复制代码
4.2.3 添加 OpenCV 4.4 的 pkg-config 路径

  1. # OpenCV 4.4 pkg-config path
  2. export PKG_CONFIG_PATH=/usr/local/opencv-4.4/lib
  3. /pkgconfig:$PKG_CONFIG_PATH
复制代码
4.2.4 应用更改

保存并关闭编辑器后,执行以下下令以应用更改:
  1. source ~/.bashrc
复制代码
4.3 验证 pkg-config 配置

验证 OpenCV 3.2:
  1. pkg-config --modversion opencv
复制代码
输出应为 3.2.0。
验证 OpenCV 4.4:
  1. pkg-config --modversion opencv
  2. 4
复制代码
输出应为 4.4.0。
5. 配置体系环境变量

配置体系环境变量确保体系可以大概在运行时找到 OpenCV 库和头文件。
5.1 设置环境变量

继续编辑 ~/.bashrc 或 ~/.zshrc 文件:
  1. nano ~/.bashrc
复制代码
5.2 添加 OpenCV 3.2 和 4.4 的环境变量

  1. # OpenCV 3.2 environment variables
  2. export OpenCV3_DIR=/usr/local/opencv-3.2
  3. export PATH=$OpenCV3_DIR/bin:$PATH
  4. export LD_LIBRARY_PATH=$OpenCV3_DIR/lib:$LD_LIBRARY_PATH
  5. export CPLUS_INCLUDE_PATH=$OpenCV3_DIR/include:$CPLUS_INCLUDE_PATH
  6. # OpenCV 4.4 environment variables
  7. export OpenCV4_DIR=/usr/local/opencv-4.4
  8. export PATH=$OpenCV4_DIR/bin:$PATH
  9. export LD_LIBRARY_PATH=$OpenCV4_DIR/lib:$LD_LIBRARY_PATH
  10. export CPLUS_INCLUDE_PATH=$OpenCV4_DIR/include:$CPLUS_INCLUDE_PATH
复制代码
5.3 应用更改

  1. source ~/.bashrc
复制代码
5.4 验证环境变量

检查环境变量是否正确配置:
  1. echo $PATH
  2. echo $LD_LIBRARY_PATH
  3. 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 文件:
  1. sudo nano /etc/ld.so.conf.d/opencv3.conf
复制代码
添加以下内容:
  1. /usr/local/opencv-3.2/lib
复制代码
6.1.2 OpenCV 4.4

创建 /etc/ld.so.conf.d/opencv4.conf 文件:
  1. sudo nano /etc/ld.so.conf.d/opencv4.conf
复制代码
添加以下内容:
  1. /usr/local/opencv-4.4/lib
复制代码
6.2 更新动态链接库缓存

  1. sudo ldconfig
复制代码
6.3 验证动态链接库配置

使用 ldconfig 检察库是否被正确辨认:
  1. 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

在终端中执行:
  1. export PATH=/usr/local/opencv-3.2/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/opencv-3.2/lib
  2. :$LD_LIBRARY_PATHexport PKG_CONFIG_PATH=/usr/local/opencv-3.2/lib
  3. /pkgconfig:$PKG_CONFIG_PATH
复制代码
7.1.2 切换到 OpenCV 4.4

在终端中执行:
  1. export PATH=/usr/local/opencv-4.4/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/opencv-4.4/lib
  2. :$LD_LIBRARY_PATHexport PKG_CONFIG_PATH=/usr/local/opencv-4.4/lib
  3. /pkgconfig:$PKG_CONFIG_PATH
复制代码
7.2 使用 update-alternatives 管理多个版本

update-alternatives 是一个用于管理多个同类步伐的工具,可以用来切换差别的 OpenCV 版本。
7.2.1 注册 OpenCV 3.2 和 4.4 到 update-alternatives

注册 opencv_version


  1. sudo update-alternatives --install /usr/bin/opencv_version
  2. opencv_version
  3. /usr/local/opencv-3.2/bin/opencv_version
  4. 32
  5. sudo update-alternatives --install /usr/bin/opencv_version
  6. opencv_version
  7. /usr/local/opencv-4.4/bin/opencv_version
  8. 44
复制代码
注册其他可执行文件(如有)

根据必要,注册其他 OpenCV 可执行文件:
  1. sudo update-alternatives --install /usr/bin/opencv_interactive-calibration opencv_interactive-calibration /usr/local/opencv-3.2/bin/opencv_interactive-calibration 32
  2. sudo update-alternatives --install /usr/bin/opencv_interactive-calibration opencv_interactive-calibration /usr/local/opencv-4.4/bin/opencv_interactive-calibration 44
  3. # 重复以上步骤为其他可执行文件注册
复制代码
7.2.2 切换 OpenCV 版本

使用以下下令选择默认版本:
  1. sudo update-alternatives --config opencv_version
复制代码
体系将表现可用版本,输入对应的编号选择。
7.2.3 验证切换结果

  1. opencv_version
复制代码
应表现选择的 OpenCV 版本号。
7.3 使用 CMake 配置差别版本

在编译项目时,可以通过 pkg-config 或手动指定 OpenCV 路径来选择差别版本。
7.3.1 使用 pkg-config

在项目的 CMakeLists.txt 中使用 pkg-config:
  1. find_package(PkgConfig REQUIRED)
  2. pkg_check_modules(OPENCV REQUIRED opencv4)  # 或 opencv
  3. include_directories(${OPENCV_INCLUDE_DIRS})
  4. link_directories(${OPENCV_LIBRARY_DIRS})
  5. add_executable(my_app main.cpp)
  6. target_link_libraries(my_app ${OPENCV_LIBRARIES})
复制代码
通过切换 PKG_CONFIG_PATH 环境变量,可以选择差别版本的 OpenCV。
7.3.2 手动指定 OpenCV 路径

在 CMake 配置下令中手动指定 OpenCV 路径:
  1. # 使用 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
  2. /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
  3. /cmake/opencv4 \      ..
复制代码
8. 实例演示

以下将通过一个具体的实例,展示如何编译一个使用 OpenCV 3.2 和 OpenCV 4.4 的简单 C++ 步伐,并在差别版本之间切换。
8.1 创建示例步伐

创建一个名为 main.cpp 的简单步伐,加载并表现一张图片:
  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. int main() {
  4.     cv::Mat image = cv::imread("example.jpg", cv::IMREAD_COLOR);
  5.     if (image.empty()) {
  6.         std::cerr << "Could not open or find the image." << std::endl;
  7.         return -1;
  8.     }
  9.     cv::imshow("Display window", image);
  10.     cv::waitKey(0);
  11.     return 0;
  12. }
复制代码
确保当前目录中有一张名为 example.jpg 的图片。
8.2 编译并运利用用 OpenCV 3.2

8.2.1 设置环境变量为 OpenCV 3.2

  1. export PATH=/usr/local/opencv-3.2/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/opencv-3.2/lib
  2. :$LD_LIBRARY_PATHexport PKG_CONFIG_PATH=/usr/local/opencv-3.2/lib
  3. /pkgconfig:$PKG_CONFIG_PATH
复制代码
8.2.2 编译步伐

  1. g++ main.cpp $(pkg-config --cflags --libs opencv) -o main_opencv3
复制代码
8.2.3 运行步伐

  1. ./main_opencv3
复制代码
应表现加载的图片,且通过 opencv_version
下令确认版本为 3.2:
  1. opencv_version
  2. # 输出: 3.2.0
复制代码
8.3 编译并运利用用 OpenCV 4.4

8.3.1 设置环境变量为 OpenCV 4.4

  1. export PATH=/usr/local/opencv-4.4/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/opencv-4.4/lib
  2. :$LD_LIBRARY_PATHexport PKG_CONFIG_PATH=/usr/local/opencv-4.4/lib
  3. /pkgconfig:$PKG_CONFIG_PATH
复制代码
8.3.2 编译步伐

  1. g++ main.cpp $(pkg-config --cflags --libs opencv4) -o main_opencv4
复制代码
8.3.3 运行步伐

  1. ./main_opencv4
复制代码
应表现加载的图片,且通过 opencv_version
下令确认版本为 4.4:
  1. opencv_version
  2. # 输出: 4.4.0
复制代码
8.4 使用 update-alternatives 切换版本

假设已按照前述步调注册 opencv_version
,可通过 update-alternatives 轻松切换默认版本。
8.4.1 切换到 OpenCV 3.2

  1. sudo update-alternatives --config opencv_version
  2. # 选择对应 OpenCV 3.2 的编号
复制代码
验证版本:
  1. opencv_version
  2. # 输出: 3.2.0
复制代码
8.4.2 切换到 OpenCV 4.4

  1. sudo update-alternatives --config opencv_version
  2. # 选择对应 OpenCV 4.4 的编号
复制代码
验证版本:
  1. opencv_version
  2. # 输出: 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表