第一章之OpenCV安装

opencv 安装

一、地址

opencv官网
opencv Github

官方安装流程
第一章之OpenCV安装_第1张图片

二、概述

opencv有两种安装方式:1、根据自己的平台选择官方编译好的版本;2、下载源码自己编译。

三、预编译版本

官方预编译版本满足大多数需求。预编译版本有两个途径:
1、OpenCV核心团队:

  • GitHub releases
  • SourceForget.net

2、第三方机构:

  • System packages in popular Linux distributions
  • PyPI
  • Conda
  • Conan
  • vcpkg
  • NuGet
  • Brew
  • Maven

四、从源码构建

如果现有的预编译版本不满足使用需求,可以下载源码自行构建编译。OpenCV使用CMake构建管理系统进行配置和构建。

Step 0:依赖

安装c++编译器(compiler)和构建工具(build tool)。
*NIX平台,通常使用GCC/C++或者Clang作为编译器,使用Make或者Ninja作为构建工具。
Windows平台,可以使用Visual Studio IDE或者MinGW-w64作为编译器。
Android平台,使用Android NDK里面的Native toolchains作为编译器。
IOS、OSX平台,使用XCode IDE。

从官方网站安装CMake。

获取其他第三方依赖:例如具有视频解码功能的库,GUI显示相关的库;对选择的算法提供优化功能的库;用于生成文档和其他额外功能的工具等。查看OpenCV配置选项参考,获取可用选项和相应的依赖库。

Step 1:获取源码

典型的软件项目由一个或多个代码仓库组成。OpenCV有三个代码仓库:opencv- 主库,包含稳定且积极支持的算法;opencv_contrib 包含实验和非免费(专利)算法;还有一个带测试数据的仓库:opecv_extra

这三个仓库有两种下载方式:
1、下载仓库的快照存档,但是上面三个仓库的名称跳转既是;
2、glone仓库的完成提交历史(后面可以自由切换版本):

git clone https://github.com/opencv/opencv
git -C opencv checkout <some-tag>
# optionally
git clone https://github.com/opencv/opencv_contrib
git -C opencv_contrib checkout <same-tag-as-opencv>
# optionally
git clone https://github.com/opencv/opencv_extra
git -C opencv_extra checkout <same-tag-as-opencv>

注: 1、opencv_contrib 模块和opencv_extra 模块都是可选项,自行根据需求安装下载;
2、如果下载这俩模块,需要确保彼此兼容性。一般情况下下载对应版本号即可。
3、考虑目标平台和开发工具的版本。最新的OpenCV可能在非常老的编译器上出现构建问题。

Step 2:配置

在这一步CMake将会验证所有的工具和依赖是否可用以及兼容性问题。同时根据选择的平台生成中间文件。比如:Makefiles、IDE 工程和解决方案。通常这一步会在一个新建的build文件夹中完成。
Note: 这一步还可以使用 cmake-gui 来可视化修改编译选项。

Step 3:构建

在构建过程中,源文件被编译成目标文件,这些目标文件被链接在一起或者组合成库和相应的程序,这个步骤通过一下命令完成:cmake --build ,或者直接调用make

Step 4:安装(可选)

在安装过程中,将把生成目录中的生成结果和其他文件复制到安装位置。UNIX上默认的安装位置是 /usr/local ,Windows上默认安装位置是 C:/Program files 。这个位置可以在配置步骤中通过设置 CMAKE_INSTALL_PREFIX 选项来更改。安装命令:cmake --build --target install
Note: 1、此步骤是可选的,不安装可以直接在build目录中使用;
2、若安装位置受系统保护,需要加上sudo权限: sudo cmake …

五、配置选项

5.1 概述

配置选项可以通过一下三种方式设置:

  • 命令行: cmake -Doption=value ...
  • 初始缓存文件: cmake -C my_options.txt ...
  • 交互式界面: cmake-gui
    个人推荐使用cmake-gui可视化配置,由于选项太多了,使用命令行或是修改配置文件,一是不直观,二是容易漏,三是太麻烦;使用cmake-gui对应的好处,一是可以直接搜索想要的配置选项;二是上面Step2提到的配置生成过程中产生的错误尤其是依赖错误,可以方便的看提示及修改;三是生成之后的配置信息可以很方便的预览,特别是某些模块是否启用,依赖库的信息等。当然最终每个人依据个人喜好以及使用场景选择。

OpenCV的大部分配置选项可以在顶层的cmake脚本中找到:opencv/CMakeLists.txt 。一些选项是和特定的模块对应的。
可以使用CMake工具打印所有的可用选项:

# initial configuration
cmake ../opencv
# print all options
cmake -L
# print all options with help message
cmake -LH
# print all options including advanced
cmake -LA

其中,比较重要的选项是以 WITH_, ENABLE_, BUILD_, OPENCV_ 为开头的。选项的默认值因平台和其他选项值而异。

5.2、通用选项

5.2.1 构建额外模块选项

这里的附件模块即Step1中提到的opencv_contrib仓库中的算法模块。编译选项可以指定其中的部分抑或是全部,参考OpenCV编码风格指南
example:

# build with all modules in opencv_contrib
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
# build with one of opencv_contrib modules
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/bgsegm ../opencv
# build with two custom modules (semicolon must be escaped in bash)
cmake -DOPENCV_EXTRA_MODULES_PATH=../my_mod1\;../my_mod2 ../opencv

5.2.2 构建Debug/Release选项

CMAKE_BUILD_TYPE 是一个可选项,用以指定生成的OpenCV库文件是debug版本抑或是release版本,区别在于debug会禁用许多编译器优化,也可以指定 CV_DISABLE_OPTIMIZATION 选项禁用优化功能,禁用优化的好处是方便断点调试。debug版本生成的二进制文件中包含调试符号。要在release版本中启用调试符号,需要开启BUILD_WITH_DEBUG_INFO 选项。

cmake -DCMAKE_BUILD_TYPE=Debug ../opencv
cmake --build .

5.2.3 构建静态库/动态库选项

BUILD_SHARED_LIBS 选择控制生成动态库 (.dll, .so, .dylib) 抑或是静态库(.a, .lib)。默认值取决于构建的目标平台,大多数情况下默认是ON(生成静态库)。

cmake -DBUILD_SHARED_LIBS=OFF ../opencv

ENABLE_PIC 设置CMAKE_POSITION_INDEPENDENT_CODE 选项。这是一个CMake的功能,启用或禁用 位置无关代码(PIC) 的生成。构建动态库或打算把静态库链接到动态库的时候,必须启用此选项。默认为ON。

5.2.4 构建 pkg-config 选项

OPENCV_GENERATE_PKGCONFIG 选项可以生成.pc 文件。至于什么是.pc(package configure 包/库配置文件)文件,比如gtk-2.0的pc文件内容如下:

prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=/usr/include
target=x11
gtk_binary_version=2.4.0
gtk_host=i386-redhat-linux-gnu
Name: GTK+
Description: GIMP Tool Kit (targettarget)Version:2.6.7Requires:gdk−{target}-2.0 atk
Libs: -Llibdir−lgtk−{target}-2.0
Cflags: -I${includedir}/gtk-2.0

可以看到.pc文件中包含了一个库的头文件、库文件所在的路径信息。GCC等编译某个工程用到这个依赖库的时候,这样用 gcc -c pkg-config –cflags gtk-2.0 sample.c 就可以方便的添加依赖信息。使用 pkg-config 的 –cflags 参数可以给出在编译时所需要的选项,而 –libs 参数可以给出连接时的选项。gcc sample.o -o sample pkg-config –libs gtk-2.0
但是,由于配置过程的复杂性,生成的.pc文件可能包含不完整的第三方依赖项列表,并且可能在某些配置中不起作用,尤其是构建的静态库中。此功能自OpenCV 4.x版本以后不再正式支持,默认禁用。

5.2.5 构建tests,samples and applications

有两种类型的tests:准确性accuracy (opencv_test_) and 性能performance (opencv_perf_)。默认情况下启用tests和applications,examples需要手动启用。
相应的CMake选项:

cmake \
  -DBUILD_TESTS=ON \
  -DBUILD_PERF_TESTS=ON \
  -DBUILD_EXAMPLES=ON \
  -DBUILD_opencv_apps=ON \
  ../opencv

5.2.6 构建部分模块

每一个模块都是modules目录下的一个子文件夹。每个模块都有单独的使能选项,可以禁用某个模块不参与构建:cmake -DBUILD_opencv_calib3d=OFF ../opencv ,也可以只构建指定的模块和它们的依赖项:cmake -DBUILD_LIST=calib3d,videoio,ts ../opencv ,这里我们指定了三个模块,但是配置脚本会自动确定所需要的其他依赖项。

– OpenCV modules:
– To be built: calib3d core features2d flann highgui imgcodecs imgproc ts videoio

5.2.7 下载依赖项

配置脚本可以尝试从网络上下载附加的库和文件,如果失败,相应的功能会被关闭。默认情况下,所有的文件被下载到/.cache 目录,然后解压或复制到构建目录。也可以通过设置环境变量或者配置选择来更改下载缓存的位置:

export OPENCV_DOWNLOAD_PATH=/tmp/opencv-cache
cmake ../opencv
# or
cmake -DOPENCV_DOWNLOAD_PATH=/tmp/opencv-cache ../opencv

下载过程的日志会被保存在构建目录的CMakeDownloadLog.txt中。对于下载失败文件,会在构建目录中的帮助脚本中添加一个命令,例如download_with_wget.sh,你可以运行这些脚本,也可修改。
注:个人经验,这些第三方依赖往往难以在配置脚本中自行下载,有一个好办法,在OpenCV 官方GitHub中找到这些第三方依赖仓库(在该仓库不同的分支下,手动下拉选择即可),手动下载,并放到相应的位置,配置脚本就不会再重新下载了,此时可以正常往下执行

5.2.8 CPU级别的优化

在x86_64的机器上,OpenCV默认会针对SSE3指令集进行编译,可以通过以下选项进行修改:

cmake -DCPU_DISPATCH=AVX,AVX2 ../opencv

Note:其他平台有自己的指令集:例如ARM上的VFPVNEON,PowerPC上的VSCX

一些函数支持dispathch机制,通过编译多个指令集并在运行时选择其中一个,编译多个指令集列表选项:cmake -DCPU_DISPATCH=AVX,AVX2 ../opencv
要禁用dispatch机制,此选项设置为空即可:cmake -DCPU_DISPATCH= ../opencv

可以使用以下选项禁用部分代码的优化,以便进行debug:

# disable universal intrinsics
cmake -DCV_ENABLE_INTRINSICS=OFF ../opencv
# disable all possible built-in optimizations
cmake -DCV_DISABLE_OPTIMIZATION=ON ../opencv

Note:更多关于CPU优化选项的细节,可以查看CPU优化选项

5.2.9 Profiling, coverage, sanitize, hardening, size optimization

以下选项可用于生产带有检测或改进安全性的特殊构建,默认都被禁用。

选项 编译器 说明
ENABLE_PROFILING GCC or Clang Enable profiling compiler and linker options
ENABLE_COVERAGE GCC or Clang Enable code coverage support.
OPENCV_ENABLE_MEMORY_SANITIZER N/A Enable several quirks in code to assist memory sanitizer.
ENABLE_BUILD_HARDENING GCC, Clang, MSVC Enable compiler options which reduce possibility of code exploitation.
ENABLE_LTO GCC, Clang, MSVC Enable Link Time Optimization (LTO)
ENABLE_THIN_LTO Clang Enable thin LTO which incorporates intermediate bitcode to binaries allowing consumers optimize their applications later.

你可能感兴趣的:(opencv,opencv)