从头开始:OpenCV 4.5.0及opencv_contrib版本编译指南

该文章已生成可运行项目,

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本教程提供了一个详细的步骤指南,用于编译OpenCV 4.5.0和opencv_contrib 4.5.0版本。OpenCV是一个用于图像处理和计算机视觉应用的库,而opencv_contrib则提供了额外的实验性和前沿功能。教程涵盖了系统环境准备、依赖项安装、源代码克隆、构建目录创建、CMake配置以及编译和安装过程。此外,还介绍了如何在C++和Python中使用编译后的库进行图像处理和计算机视觉任务。最后,概述了OpenCV 4.5.0的一些新特性和opencv_contrib模块提供的功能。 opencv+contrib版本450 CMake编译

1. OpenCV和opencv_contrib介绍

OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉和机器学习软件库,广泛应用于图像处理、视频分析、特征检测等领域。随着计算机视觉技术的不断进步,OpenCV也在持续更新和演进,最新版本为OpenCV 4.5.0。

opencv_contrib包含了社区贡献的额外模块,为OpenCV提供了更丰富的功能,例如图像分割、文本检测、深度学习集成等。这些模块的引入,大大增强了OpenCV作为图像处理工具箱的灵活性和功能性,同时也为研究人员和开发者提供了展示和测试新算法的平台。

在学习如何构建和使用OpenCV之前,理解其架构和用途是至关重要的。通过本章的介绍,我们将对OpenCV及其opencv_contrib扩展有基本的认识,为后续章节的深入学习打下坚实的基础。接下来,我们将探索如何为编译OpenCV 4.5.0及其contrib扩展准备系统环境和依赖项,以确保顺利进行后续的操作。

2. 编译OpenCV 4.5.0和opencv_contrib 4.5.0的系统环境和依赖项

2.1 系统环境准备

2.1.1 Linux、Windows和MacOS系统选择

OpenCV库支持广泛的操作系统,包括Linux、Windows和MacOS。对于想运行OpenCV应用程序的用户来说,首先需要确定你的系统环境。

  • Linux 是OpenCV开发和应用最广泛的平台,特别是基于Debian和Red Hat的系统,例如Ubuntu和Fedora。Linux系统以其开源特性和对硬件的良好支持,在学术研究和工业应用中占据了重要地位。

  • Windows 系统具有广泛的用户基础,特别是对于想要进行图像处理和计算机视觉开发的初学者和爱好者来说,Windows平台提供了易于使用的环境。然而,你需要确保安装了适当的编译工具和库。

  • MacOS 则是苹果生态系统中的常用系统。对于Mac用户来说,OpenCV的安装和使用也是完全可行的,但可能需要处理好与XCode和相关依赖库的关系。

系统的选择将直接影响到后续的安装和配置步骤。例如,在Linux上安装依赖项通常比在Windows上要简单,因为大多数依赖项可以通过包管理器轻松安装。

2.1.2 环境变量的配置方法

环境变量的配置是为了让系统知道OpenCV的安装路径,以便在运行时能够找到OpenCV的库文件和头文件。配置环境变量的方法依操作系统而异。

Linux 系统中,通常通过编辑 ~/.bashrc ~/.profile 文件来设置环境变量。例如,如果你的OpenCV安装在 /usr/local/opencv 目录下,你可以添加以下行到 ~/.bashrc 文件:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib
export OPENCV_DIR=/usr/local/opencv
export PATH=$PATH:$OPENCV_DIR/bin

对于 Windows ,环境变量的配置可以在系统的属性设置中找到。你需要添加一个系统环境变量 OPENCV_DIR ,并将其值设置为OpenCV的安装路径。然后,将OpenCV的 bin 目录添加到系统的PATH变量中。

MacOS 上,配置环境变量通常通过编辑 .bash_profile .zshrc 文件来完成,方法类似于Linux。

2.2 必要依赖项的安装

2.2.1 C/C++编译器的安装与配置

安装OpenCV需要一个C/C++编译器,如GCC或Clang。对于不同的操作系统,安装方法如下:

  • Linux 下,GCC或Clang通常可以通过包管理器安装。例如,在Ubuntu上,你可以使用以下命令安装GCC:
sudo apt-get update
sudo apt-get install build-essential
  • Windows 下,推荐使用MinGW或Visual Studio。MinGW可以从其官方网站下载安装,而Visual Studio可以从Visual Studio官网免费下载社区版进行安装。

  • MacOS 下,XCode内置了Clang编译器,可以通过Mac App Store进行安装。

安装完编译器后,需要验证编译器是否安装成功。可以通过在终端或命令提示符输入以下命令进行测试:

gcc --version

或者

clang --version
2.2.2 开发库和工具的安装步骤

除了编译器之外,OpenCV还依赖于一些其他开发库和工具。下面是一些通常需要安装的库:

  • CMake :用于构建和安装OpenCV的工具。可以从CMake官网下载并安装。

  • Git :用于获取OpenCV源代码的版本控制系统。Linux和MacOS通常通过包管理器安装,Windows用户可以通过Git官方网站下载安装程序。

  • Python :OpenCV提供Python绑定。需要安装Python 3.x版本。推荐使用Anaconda来安装和管理Python环境。

  • 其他库 :具体取决于OpenCV版本及其特性,可能需要安装诸如GTK、Qt、OpenNI等额外的库。

例如,在Linux上安装CMake、Git和Python可以通过以下命令完成:

sudo apt-get update
sudo apt-get install cmake git python3 python3-pip

2.3 可选依赖项和特性支持

2.3.1 CUDA和OpenCL支持

为了支持GPU加速,OpenCV可以利用CUDA和OpenCL进行图像处理和计算机视觉任务。对于需要高性能计算的开发者,安装CUDA或OpenCL是有益的。

  • CUDA 是NVIDIA的并行计算平台和编程模型,你需要安装NVIDIA的GPU驱动和CUDA Toolkit。可以在NVIDIA官网下载并安装。

  • OpenCL 是一种用于跨多种处理器进行编程的框架。它是由Khronos Group维护的,OpenCL的实现可以在各种处理器(包括CPU、GPU和其他处理器)上运行。

2.3.2 Java、Python和MATLAB接口

OpenCV提供对Java、Python和MATLAB的接口,这使得不同语言的开发者能够更容易地利用OpenCV的功能。

  • Java :使用Java开发OpenCV应用时,需要下载并安装Java Development Kit (JDK)。

  • Python :已经为Python提供了绑定,可以使用pip安装OpenCV:

pip3 install opencv-python
  • MATLAB :MATLAB用户可以通过添加OpenCV库到MATLAB的库路径来使用OpenCV。

对于这些语言接口的安装和配置,请根据官方文档进行操作以确保正确安装。

以上为第二章的详细内容,本章主要介绍了编译OpenCV和opencv_contrib所需的系统环境准备、必要依赖项的安装步骤、以及可选依赖项和特性支持。接下来,我们将探索克隆源代码仓库的过程以及如何创建构建目录和配置CMake。

3. 克隆源代码仓库

3.1 Git克隆方法

3.1.1 使用Git命令行克隆

为了获取OpenCV的最新源代码,最常用的方法是使用Git克隆命令。通过克隆,我们能够获得源代码的副本,这个副本将作为后续构建和配置的基础。使用Git命令行克隆代码仓库是一个快速且高效的方式。下面展示了如何使用Git命令行工具来克隆OpenCV的源代码仓库。

# 在终端中执行以下命令:
git clone https://github.com/opencv/opencv.git

这条命令会将OpenCV的官方仓库克隆到当前工作目录下。执行上述命令后,你的本地环境中将拥有OpenCV的源代码副本,方便进行后续的编译和安装操作。

3.1.2 源代码目录结构分析

克隆完成后,你的目录结构将包含多个文件和子目录。理解这些目录和文件的组织结构是非常重要的,因为它们将是你在接下来编译过程中需要操作的对象。以下是一些关键的目录和它们的作用说明:

  • apps/ :这个目录包含了一些示例应用程序和测试代码。
  • build/ :这是一个空目录,用于存放构建过程生成的文件,如编译后的目标文件和库文件。
  • cmake/ :包含OpenCV构建系统所需的CMake模块和配置文件。
  • doc/ :存放了OpenCV的文档资源,如Doxygen生成的API文档。
  • modules/ :包含OpenCV的核心模块和一些扩展模块。
  • samples/ :提供了使用OpenCV功能的示例代码。

3.2 源代码的更新和维护

3.2.1 获取最新代码的步骤

源代码克隆完成后,你可能会希望定期更新你的本地副本以获取最新的功能和bug修复。为了实现这一目标,你可以使用以下命令来同步远程仓库和本地仓库。

cd opencv
git fetch origin
git pull

这些命令首先切换到你的本地OpenCV目录,然后从远程获取最新的提交,并将这些变更合并到本地的工作副本中。执行这些步骤后,你的本地仓库应该和远程主仓库保持同步。

3.2.2 使用分支和标签管理版本

为了更好地管理不同的版本和功能,OpenCV使用Git分支和标签来标记重要的提交。例如,版本号通常对应于一个标签(tag)。如果你需要切换到特定的OpenCV版本,可以使用以下命令:

git checkout tags/4.5.0

这个命令将会切换到标签为4.5.0的提交,从而你可以基于这个版本进行开发。如果你想要参与OpenCV的开发,还可以考虑在特性分支(feature branch)上工作,这有助于避免主分支(master branch)上的冲突。

通过掌握这些源代码管理技巧,你可以确保你的开发环境始终能够利用到OpenCV最新的功能和改进。

4. 构建目录的创建和CMake配置

4.1 构建目录的创建

4.1.1 构建目录的命名和位置

在开始编译OpenCV之前,需要创建一个构建目录(build directory)。构建目录是一个用于存放编译过程中生成的所有文件的独立目录,这有助于维护源代码树的干净和有序。建议将构建目录放置在源代码树之外,通常的做法是在源代码目录的同级目录下创建一个构建目录。例如,如果你的源代码位于 ~/opencv/opencv ,那么构建目录可以是 ~/opencv/opencv-build

使用命令行来创建构建目录的示例如下:

mkdir -p ~/opencv/opencv-build
cd ~/opencv/opencv-build

4.1.2 构建目录的初始化

创建构建目录之后,需要初始化它以便使用CMake配置。这可以通过运行CMake的命令行工具来完成,你需要指定源代码的路径以及构建目录的路径。命令如下:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ../opencv/

这里, -D 用于传递变量到CMake, CMAKE_BUILD_TYPE=Release 表示编译时使用的是发布(非调试)模式, CMAKE_INSTALL_PREFIX=/usr/local 表示安装路径。 ../opencv/ 是源代码目录的相对路径。根据你的操作系统和需求,你可能需要添加其他选项或调整路径。

4.2 CMake配置说明

4.2.1 配置流程的概述

CMake配置过程通常涉及以下几个步骤:

  1. 运行CMake配置命令并选择适当的编译器和构建选项。
  2. 如果需要,修改生成的 CMakeCache.txt 文件,调整特定的配置变量。
  3. 使用CMake提供的工具(如 ccmake cmake-gui )交互式地设置或修改构建选项。
  4. 生成构建系统文件(例如Makefiles)。

4.2.2 CMakeLists.txt的修改和定制

CMakeLists.txt 文件是CMake项目的核心配置文件,负责指定项目的构建规则以及依赖关系。OpenCV源代码树中已经包含了这个文件,但对于高级用户来说,可能需要对其进行定制。例如,如果你想启用或禁用特定模块,可以在CMake配置过程中调整 BUILD_opencv_XXX 类型的变量,其中 XXX 是相应的模块名称。

举一个例子,如果你不想构建OpenCV的视频处理模块,可以在CMake配置阶段设置:

cmake -D BUILD_opencv_videoio=OFF ../opencv/

4.3 配置选项和变量的详细解释

4.3.1 启用和禁用模块

OpenCV提供了丰富的模块,但并不是所有的模块都是必需要的。根据你的需求,可以启用或禁用某些模块以减少最终生成的库文件的大小,或者避免不必要的编译时间。例如,如果你不需要OpenCV的Python支持,可以通过设置 BUILD_opencv_python OFF 来禁用它。

cmake -D BUILD_opencv_python=OFF ../opencv/

4.3.2 内存管理和其他高级选项

OpenCV允许通过CMake配置进行高级内存管理设置,比如启用内存分配器优化。此外,还有一些与性能相关的选项,如启用SIMD优化等。例如,你可以开启OpenCV的NEON优化(适用于ARM架构),通过设置:

cmake -D ENABLE_NEON=ON ../opencv/

还可以设置特定的编译器优化选项,例如使用GCC或Clang的特定优化标志,例如 -march=native ,它会启用对当前CPU架构的优化:

cmake -D CMAKE_CXX_FLAGS="-march=native" ../opencv/

在修改高级选项时,建议理解每个选项的作用,以及它们可能对生成的库文件、性能和兼容性的影响。过度优化可能会牺牲跨平台兼容性或导致在不同硬件上运行时出现问题。

通过上面的步骤,你可以根据需要定制OpenCV的构建过程。记住,你可能需要多次运行CMake并根据反馈调整配置,以达到你期望的构建结果。

5. 编译和安装过程

5.1 编译过程的监控和控制

编译过程是将源代码转换为可执行程序的阶段,对于任何开发人员来说,理解编译过程是至关重要的。OpenCV的编译可能需要一些时间,这取决于你的系统配置和你选择编译的模块数量。

5.1.1 编译命令的执行

在Linux系统中,通常使用make命令来进行编译。假设你已经成功配置了CMake,进入到构建目录并执行以下命令:

make -j$(nproc)

这个命令告诉系统使用所有可用的CPU核心( -j$(nproc) )来加速编译过程。如果你希望编译过程更加详细和冗长,可以通过添加 -v 参数来获取更多信息。

在Windows系统中,如果你使用的是Visual Studio,那么你将通过IDE来编译项目。确保在CMake配置阶段正确选择了Visual Studio版本。

5.1.2 编译错误和警告的处理

在编译过程中,你可能会遇到错误或警告信息。错误通常会导致编译过程停止,因此必须解决它们才能继续。警告信息虽然不会阻止编译过程,但它们可能指示潜在的问题,也应予以注意。

确保遵循以下步骤来解决错误:

  1. 仔细阅读错误消息,它通常会告诉你问题所在,比如缺少依赖项或者代码问题。
  2. 如果错误是关于依赖项,请确保所有必需的库和工具都已正确安装。
  3. 如果是代码问题,请检查源代码以确定和修正错误。
  4. 如果错误持续存在,尝试清理构建目录(使用 make clean 或在Visual Studio中使用清理解决方案),然后重新运行CMake配置和编译步骤。

5.2 安装过程的详细步骤

成功编译OpenCV后,下一步是安装它,使其可以被系统和应用程序使用。

5.2.1 安装命令的运行

在编译完成后,通常使用以下命令来安装OpenCV库:

sudo make install

在Windows上,如果你使用的是Visual Studio,安装通常是通过Visual Studio Installer完成的,或者你可以直接将库文件和头文件复制到适当的系统目录。

5.2.2 安装后的验证和测试

安装完成后,你应该验证安装是否成功。这可以通过编译并运行一些简单的OpenCV程序来完成。下面是一个简单的C++示例,展示如何使用OpenCV来显示一张图片:

#include <opencv2/opencv.hpp>
#include <iostream>

int main(int argc, char** argv) {
    if (argc != 2) {
        std::cout << "Usage: display_image <Image_Path>\n";
        return -1;
    }

    cv::Mat image = cv::imread(argv[1], cv::IMREAD_COLOR);
    if (image.empty()) {
        std::cout << "Could not open or find the image\n";
        return -1;
    }

    cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);
    cv::imshow("Display window", image);

    cv::waitKey(0);
    return 0;
}

确保在编译时链接了OpenCV库:

g++ -o display_image display_image.cpp `pkg-config --cflags --libs opencv4`

运行上述代码,如果能够成功显示图片,说明你的OpenCV库已经正确安装。

5.3 静态和动态库的管理

在编译OpenCV时,你可以生成静态或动态库。这两种类型的库各有优劣。

5.3.1 库文件的生成和差异

静态库(如 libopencv_core.a )在编译时会被复制到可执行文件中。这意味着你的应用程序将包含所有必要的库代码,这在分发程序时非常方便,因为不需要额外的库文件。然而,这也意味着生成的可执行文件可能比较大。

动态库(如 libopencv_core.so )在运行时由操作系统加载。它们使应用程序更小,因为代码只存储一次,但需要确保在运行时可以找到这些库。此外,这可能导致依赖问题。

5.3.2 如何选择合适的库类型

选择静态库还是动态库取决于你的特定需求:

  • 如果你正在开发一个独立的应用程序,可能希望使用静态库。
  • 如果你在开发需要较小可执行文件的应用,或者你需要频繁更新库而不想重新编译整个应用程序,那么动态库可能是更好的选择。

在CMake配置过程中,你可以通过设置 BUILD_SHARED_LIBS 变量来控制库的类型。设置为 OFF 将构建静态库,设置为 ON 将构建动态库。

cmake -DBUILD_SHARED_LIBS=OFF ..

或者:

cmake -DBUILD_SHARED_LIBS=ON ..

根据项目的具体需求,选择最适合你的设置。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本教程提供了一个详细的步骤指南,用于编译OpenCV 4.5.0和opencv_contrib 4.5.0版本。OpenCV是一个用于图像处理和计算机视觉应用的库,而opencv_contrib则提供了额外的实验性和前沿功能。教程涵盖了系统环境准备、依赖项安装、源代码克隆、构建目录创建、CMake配置以及编译和安装过程。此外,还介绍了如何在C++和Python中使用编译后的库进行图像处理和计算机视觉任务。最后,概述了OpenCV 4.5.0的一些新特性和opencv_contrib模块提供的功能。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值