乌市泽哥 发表于 2025-1-19 12:02:28

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

细致指南:在 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 文件:
nano ~/.bashrc

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 应用更改

保存并关闭编辑器后,执行以下下令以应用更改:
source ~/.bashrc

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 文件:
nano ~/.bashrc

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 应用更改

source ~/.bashrc

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 更新动态链接库缓存

sudo ldconfig
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_version
应表现选择的 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 运行步伐

./main_opencv3
应表现加载的图片,且通过 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 运行步伐

./main_opencv4
应表现加载的图片,且通过 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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 细致指南:在 Ubuntu 20.04 中源码编译安装 OpenCV 并举行全面配置,包罗多