OpenCV 配置选项参考文档

OpenCV 配置选项参考文档

    • 介绍
    • 通用选项
      • 和附加模块一起构建
      • 调试(Debug)构建
      • 静态构建
      • 生成 pkg-config 信息
      • 构建测试、示例和应用
      • 只构建部分模块
      • 下载的依赖项
      • CPU 优化级别
      • 性能分析、代码覆盖率、清理、强化、size optimization
    • 功能特性与依赖项相关
      • 选项命名规范
      • 异构计算
        • 对 CUDA 的支持
        • 对 OpenCL 的支持
      • 图像的读写(imgcodecs 模块)
        • 内置格式
        • 对 PNG, JPEG, TIFF, WEBP 的支持
        • GDAL 集成
        • GDCM 集成
      • 视频的读写(videoio 模块)
        • Video4Linux
        • FFmpeg
        • GStreamer
        • Microsoft Media Foundation
        • DirectShow
        • AVFoundation
        • 其它后端
        • videoio plugins
      • 并行处理
        • 多线程插件
      • GUI 后端(highgui 模块)
        • OpenGL
        • highgui 插件
      • 深度学习神经网络推断后端和选项 (dnn 模块)
    • 安装布局
      • 安装根目录
      • 组件和位置
    • 其他功能
      • 自动化构建
      • Contrib 模块
    • 尚未写入文档的其它选项

本文参考官方文档 OpenCV configuration options reference,更新的内容请参考此文档。

由于博主水平有限,且刚接触 OpenCV,翻译有不通顺、错误的地方,请大佬们指正。本文会龟速长期纠正更新。

介绍

NOTE: 本文假设您已阅读 OpenCV installation overview 教程或具有 CMake 的操作经验。

可以通过几种不同的方式设置配置选项:

  • 命令行:cmake -Doption=value ...
  • 初始缓存文件: cmake -C my_options.txt ...
  • 通过图形用户界面(GUI,cmake-gui)进行交互操作

本文中将使用常规命令行。

大部分选项都可以在 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_ 为前缀的那些。

选项的默认值因平台和其他选项值而异。

通用选项

和附加模块一起构建

  • OPENCV_EXTRA_MODULES_PATH 选项的值应为一个用分号分隔的目录列表,这些目录包含你要一起构建的那些附加模块。模块目录必须有兼容的布局和 CMakeLists.txt,简要说明可以在 Coding Style Guide 中找到。

示例:

# 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

NOTE: 仅支持 0 级和 1 级深度模块位置,下面的命令会引发错误:
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib ../opencv

调试(Debug)构建

CMAKE_BUILD_TYPE 选项可用于启用调试构建;生成的二进制文件将包含调试符号,并且大多数编译器优化将被关闭。

要在发布(Release)版本中启用调试符号,请开启 BUILD_WITH_DEBUG_INFO 选项。

在某些平台(操作系统)例如 Linux 上,必须在配置阶段设置构建类型(BUILD_TYPE):

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

在其他平台上,可以在同一构建目录中生成不同类型的构建(例如 Visual Studio、XCode):

cmake  ../opencv
cmake --build . --config Debug

如果你使用 GNU libstdc++(GCC 的默认值),可以打开 ENABLE_GNU_STL_DEBUG 选项,然后 C++ 库可以在调试模式下使用,例如:访问 vector 元素时将检查索引边界。

可以使用 CV_DISABLE_OPTIMIZATION 选项禁用许多优化:

  • 一些第三方库(例如 IPP、Lapack、Eigen)
  • Explicit vectorized implementation (universal intrinsics, raw intrinsics, etc.)
  • 调度优化
  • 显式循环展开

也可以参考:

  • CMake variable: CMAKE_BUILD_TYPE
  • GNU libstdc++ manual: using macros
  • OpenCV wiki: CPU optimizations build options

静态构建

BUILD_SHARED_LIBS 选项控制是生成动态库(.dll、.so、.dylib)还是静态库(.a、.lib)。 该选项的默认值取决于目标平台,在大多数情况下是 ON(生成静态库)。

示例:

cmake -DBUILD_SHARED_LIBS=OFF ../opencv

也可以参考:Wikipedia: Static library

ENABLE_PIC 设置 CMAKE_POSITION_INDEPENDENT_CODE 选项。 它启用或禁用“位置无关代码(PIC)”的生成。 构建动态库或打算链接到动态库的静态库时,必须启用此选项。 默认值为 ON

也可以参考:Wikipedia: Position-independent_code

生成 pkg-config 信息

OPENCV_GENERATE_PKGCONFIG 选项启用带标准 CMake 包的 .pc 文件生成。该文件对于不使用 CMake 进行构建的项目很有用。

示例:

cmake -DOPENCV_GENERATE_PKGCONFIG=ON ../opencv

NOTE: 由于配置过程的复杂性,导致 .pc 文件可能包含不完整的第三方依赖项列表,并且可能在某些配置中不起作用,尤其是对于静态构建。 此功能自 OpenCV 4.x 版本起不再正式支持,默认禁用(disable)。

构建测试、示例和应用

有两种测试:准确性 accuracy (opencv_test_*) 和性能 performance (opencv_perf_*)。默认情况下启用测试和应用,而不构建示例,你需要显式(手动)启用它。

相应的 CMake 选项:

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

只构建部分模块

OpenCV 每个模块都是源代码目录中 module 目录的子目录。 可以使用以下选项来禁用一个模块:

cmake -DBUILD_opencv_calib3d=OFF ../opencv

另一个相反功能的选项只构建指定的模块和它们依赖的所有模块:

cmake -DBUILD_LIST=calib3d,videoio,ts ../opencv

在这个例子中,我们请求了 3 个模块,并且配置脚本已自动确定所有依赖项:

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

下载的依赖项

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

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

如果你通过代理访问网络,在运行 cmake 前需要设置相应的环境变量:

export http_proxy=:
export https_proxy=:

下载过程的完整日志可以在构建目录中的 CMakeDownloadLog.txt 文件中找到。此外,对于每个失败的下载,都会在构建目录中的帮助脚本中添加一个命令,例如 download_with_wget.sh。用户可以按原样运行这些脚本,也可以根据自己的需要进行修改。

CPU 优化级别

默认情况下,在 x86_64 机器上,该库将针对 SSE3 指令集级别进行编译。 此级别可以通过配置选项更改:

cmake -DCPU_BASELINE=AVX2 ../opencv

NOTE: 其他平台有自己的指令集级别:ARM 上的 VFPV3NEON,PowerPC 上的 VSX

一些函数支持分派机制,允许为多个指令集进行编译并在运行时在其中选择一个。 可以在配置期间更改启用的指令集列表:

cmake -DCPU_DISPATCH=AVX,AVX2 ../opencv

要禁用分派机制,此选项值应设置为空:

cmake -DCPU_DISPATCH= ../opencv

可以使用以下选项禁用优化部分代码以便进行故障排除和调试:

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

NOTE: 关于 CPU 优化选项的更多细节可以在 OpenCV wiki: CPU optimizations build options 上找到

性能分析、代码覆盖率、清理、强化、size optimization

性能分析(Profiling)、代码覆盖率(Coverage)、清理(Sanitize)、强化(Hardening)、size optimization

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

选项 编译器 说明
ENABLE_PROFILING GCC 或 Clang 启用编译器和链接器的性能分析选项。
ENABLE_COVERAGE GCC 或 Clang 启用对代码覆盖率的支持。
OPENCV_ENABLE_MEMORY_SANITIZER 不适用 在代码中启用几个 quirks 以协助内存清理器。
ENABLE_BUILD_HARDENING GCC、Clang、MSVC 启用减少代码开发可能性的编译器选项。
ENABLE_LTO GCC、Clang、MSVC 启用链接时间优化 (LTO)。
ENABLE_THIN_LTO Clang 启用 Thin LTO,它将中间代码合并到二进制文件中,允许稍后优化应用程序。

也可以参考:

  • GCC instrumentation
  • Build hardening
  • Interprocedural optimization
  • Link time optimization
  • ThinLTO

功能特性与依赖项相关

有许多可选的依赖项和功能特性可以打开或关闭。CMake 有一个特殊选项可以打印所有可用配置参数:

cmake -LH ../opencv

选项命名规范

用于控制依赖库的选项有三种,分别有不同的前缀:

  • WITH_:是否启用(enable or disable)此依赖
  • BUILD_:是否启用与 OpenCV 捆绑的第三方库的构建与使用
  • HAVE_:表明此依赖是否被启用,当自动检测无法使用时,可以用于手动启用一个依赖

当一个 WITH_ 选项被 启用 时,有:

  • 如果 相应的 BUILD_ 选项也被启用,第三方库被构建并启用 => 相应的 HAVE_ 选项值会被设置为 ON
  • 如果相应的 BUILD_ 选项被禁用,会检测第三方库,如果第三方库被找到则被启用 => 如果找到了依赖则相应的 HAVE_ 选项值会被设置为 ON

异构计算

对 CUDA 的支持

WITH_CUDA (默认值:OFF

OpenCV 的许多算法用 CUDA 加速实现,这些函数在单独的模块中。需要预先安装 CUDA toolkit。必须先从 NVIDIA 官网安装 CUDA toolkit。 对于低于 3.9 的 CMake 版本,OpenCV 使用自己的 cmake/FindCUDA.cmake 脚本,而对于较新的 CMake 版本,OpenCV 使用与 CMake 一起打包的版本。 附加选项可用于控制构建过程,例如 CUDA_GENERATIONCUDA_ARCH_BIN。 这些参数尚未写入文档,请查阅 cmake/OpenCVDetectCUDA.cmake 脚本了解详细信息。

NOTE: 从 OpenCV 4.0 版本开始所有的 CUDA 加速算法被移动到了 opencv_contrib 仓库(OpenCV Contrib) 中。要一起构建 opencv 和 opencv_contrib,请参考上一节的 和附加模块一起构建 小节。
一些教程可以在相应的部分找到:GPU-Accelerated Computer Vision (cuda module)

也可以参考:

  • CUDA-accelerated Computer Vision
  • Wikipedia: CUDA

TODO: 其他选项: WITH_CUFFT, WITH_CUBLAS, WITH_NVCUVID

对 OpenCL 的支持

WITH_OPENCL(默认值:ON

许多使用 OpenCL 加速的算法可以通过所谓的 “Transparent API (T-API)” 来访问。此集成使用了在用户级上与常规 CPU 实现相同的函数。当输入和输出的图形参数被作为不透明的 cv::UMat 对象传递时会切换到 OpenCL 分支执行。需要了解更多的信息可以参考 The Brief Introduction 和 OpenCL support

在构建时,此功能不需要任何先决条件。运行时需要一个 OpenCL runtime,你可以使用 clinfo 和/或 opencv_version --opencl 命令来检查它是否存在。OpenCL 集成的一些参数可以使用环境变量进行修改,例如 OPENCV_OPENCL_DEVICE。但目前还没有关于此功能的完整文档,因此要获取详细信息请查看 modules/core/src/ocl.cpp 文件中的源代码。

也可以参考:Wikipedia: OpenCL

TODO:其他选项:WITH_OPENCL_SVMWITH_OPENCLAMDFFTWITH_OPENCLAMDBLASWITH_OPENCL_D3D11_NVWITH_VA_INTEL

图像的读写(imgcodecs 模块)

内置格式

下面这些格式可以直接被 OpenCV 读取而不需要任何第三方库的帮助:

  • BMP
  • HDR (WITH_IMGCODEC_HDR)
  • Sun Raster (WITH_IMGCODEC_SUNRASTER)
  • PPM, PGM, PBM, PFM (WITH_IMGCODEC_PXM, WITH_IMGCODEC_PFM)

对 PNG, JPEG, TIFF, WEBP 的支持

格式 编译选项 默认值 强制构建自身
PNG WITH_PNG ON BUILD_PNG
JPEG WITH_JPEG ON BUILD_JPEG
TIFF WITH_TIFF ON BUILD_TIFF
WEBP WITH_WEBP ON BUILD_WEBP
JPEG2000 with OpenJPEG WITH_OPENJPEG ON BUILD_OPENJPEG
JPEG2000 with JasPer WITH_JASPER ON(请参考 NOTE BUILD_JASPER
EXR WITH_OPENEXR ON BUILD_OPENEXR

读取这些格式的图像所需的所有库都包含在 OpenCV 中,如果在配置阶段未找到,则会自动构建。 相应的 BUILD_* 选项将强制构建和使用自己的库,它们在某些平台上默认启用,例如 Windows。

NOTE: OpenJPEG 的优先级高于已弃用的 JasPer。 要使用 JasPer,必须禁用 OpenJPEG。

GDAL 集成

WITH_GDAL (默认值:OFF

GDAL 是一个更高级别的库,支持读取多种文件格式,包括 PNG、JPEG 和 TIFF。 打开文件时它将具有更高的优先级,并且可以覆盖其他后端。 将使用 CMake 包机制搜索此库,确保已正确安装或手动设置 GDAL_DIR 环境或 CMake 变量。

GDCM 集成

WITH_GDCM (默认值:OFF

通过 GDCM 库启用 DICOM 医学图像格式支持。 将使用 CMake 包机制搜索此库,确保已正确安装或手动设置 GDCM_DIR 环境或 CMake 变量。

视频的读写(videoio 模块)

TODO:videoio 的工作原理、注册表、优先级

Video4Linux

WITH_V4L (Linux;默认值:ON

使用 Video4Linux API 从相机捕获图像。必须安装 Linux 内核头文件。

FFmpeg

WITH_FFMPEG (默认值:ON

与 FFmpeg 库集成,用于解码和编码视频文件和网络流。 这个库可以读写许多流行的视频格式。由几个组件组成,它们需要提前安装:

  • avcodec
  • avformat
  • avutil
  • swscale
  • avresample (可选)

除了 Windows 平台:一个预构建的 包含 FFmpeg 的插件库 将在配置阶段被下载并与所有生成的库一起被复制到 bin 文件夹。

NOTE: 可以使用 Libav 库代替 FFmpeg,但不积极支持这种组合。

GStreamer

WITH_GSTREAMER(默认值:ON

启用与 GStreamer 库的集成,用于解码和编码视频文件、从摄像机和网络流中捕获帧。 可以安装许多插件来扩展支持的格式列表。OpenCV 允许运行作为字符串传递给 cv::VideoCapturecv::VideoWriter 对象的任意 GStreamer 管道。

各种 GStreamer 插件在不同平台上提供硬件加速的视频处理。

Microsoft Media Foundation

WITH_MSMF(Windows;默认值:ON
启用使用 Windows 的内置媒体基础框架(Windows’ built-in Media Foundation framework)的 MSMF 后端。 可用于从相机捕获帧,解码和编码视频文件。

此后端具有硬件加速处理支持——WITH_MSMF_DXVA 编译选项,其默认值为 ON

NOTE: 较早版本的 Windows(10 之前)可能具有不兼容的 Media Foundation 版本,已知在 OpenCV 中使用它们时会出现问题。

DirectShow

WITH_DSHOW(Windows;默认值:ON

此后端使用较旧的 DirectShow 框架。 它只能用于从相机捕获帧。 现在不推荐使用它以支持 MSMF 后端,尽管两者可以在同一个构建中同时启用。

AVFoundation

WITH_AVFOUNDATION(Apple;默认值:ON

AVFoundation 框架是 Apple 平台的一部分,可用于从相机捕获帧、编码和解码视频文件。

其它后端

有多个不太流行的框架可用于读取和写入视频。 每个都需要安装相应的库或 SDK。

选项 默认值 描述
WITH_1394 ON 使用 DC1394 库对 IIDC IEEE1394 的支持。
WITH_OPENNI OFF OpenNI 可用于从深度感应相机捕获数据。已弃用。
WITH_OPENNI2 OFF OpenNI2 可用于从深度感应相机捕获数据。
WITH_PVAPI OFF PVAPI 是用于 Prosilica GigE 相机的旧版 SDK。 已弃用。
WITH_ARAVIS OFF Aravis 库用于使用 Genicam 相机进行视频采集。
WITH_XIMEA OFF 对 XIMEA 相机的支持。
WITH_XINE OFF 对 XINE 库的支持。
WITH_LIBREALSENSE OFF 对 RealSense 摄像头的支持。
WITH_MFX OFF MediaSDK 库可用于原始视频流的硬件加速解码和编码。
WITH_GPHOTO2 OFF GPhoto 库可用于从相机中捕获帧。
WITH_ANDROID_MEDIANDK ON 自 API level 21 起,MediaNDK 库可以在 Android 上使用。

videoio plugins

OpenCV 从 4.1.0 版本开始,一些 videoio 后端可以构建为插件,从而打破对第三方库的严格依赖,并使它们在运行时成为可选项。以下选项可用于控制此机制:

选项 默认值 描述
VIDEOIO_ENABLE_PLUGINS ON 完全启用或禁用插件。
VIDEOIO_PLUGIN_LIST 要编译为插件的后端名称的列表,使用逗号或分号分隔。支持的名称有 ffmpeggstreamermsmfmfxall

在 OpenCV installation overview 中有特定插件的构建说明。

并行处理

一些 OpenCV 算法可以使用多线程来加速处理。OpenCV 可以和一个多线程(Threading)后端一起构建。

后端 选项 默认值 平台 描述
pthreads WITH_PTHREADS_PF ON 类 Unix 基于 pthreads 库的默认后端可在 Linux、Android 和其他类 Unix 平台上使用。线程池在 OpenCV 中实现,可以通过环境变量 OPENCV_THREAD_POOL_* 进行控制。详细信息请参考 modules/core/src/parallel_impl.cpp 文件中的源代码。
Concurrency 不适用 ON Windows Concurrency runtime 在 Windows 上可用,除非启用其他后端,否则将在支持的平台上打开。
GCD 不适用 ON Apple Grand Central Dispatch 在 Apple 平台上可用,除非启用其他后端,否则将自动打开。使用全局系统线程池。
TBB WITH_TBB OFF 跨平台 Threading Building Blocks 是一个用于并行编程的跨平台库。
OpenMP WITH_OPENMP OFF 跨平台 OpenMP API 依赖于编译器支持。
HPX WITH_HPX OFF 跨平台 High Performance ParallelX 是一个实验性后端,更适合多处理器环境。

NOTE: OpenCV 可以从 GitHub 下载和构建 TBB 库,可以使用 BUILD_TBB 选项启用此功能。

多线程插件

从 OpenCV 4.5.2 开始支持动态加载线程后端。 目前仅支持单独的编译过程:首先必须使用一些默认的并行后端(例如 pthreads)构建 OpenCV,然后构建每个插件并将生成的二进制文件复制到 lib 或 bin 文件夹。

选项 默认值 描述
PARALLEL_ENABLE_PLUGINS ON 启用插件支持。如果禁用此选项,OpenCV 将不会尝试加载任何内容。

在 OpenCV installation overview 中有特定插件的构建说明。

GUI 后端(highgui 模块)

OpenCV 依赖于各种 GUI 库来绘制窗口。

选项 默认值 平台 描述
WITH_GTK ON Linux GTK 是 Linux 和类 Unix 操作系统中的常用工具包。 默认情况下如果找到版本 3 将使用它,可以使用 WITH_GTK_2_X 选项来强制使用版本 2。
WITH_WIN32UI ON Windows WinAPI 是 Windows 中的标准 GUI API。
不适用 ON macOS Cocoa 是 macOS 中使用的框架。
WITH_QT OFF 跨平台 Qt 是一个跨平台的 GUI 框架。

NOTE: 带对 Qt 支持的 OpenCV 编译后启用了高级的 highgui 接口,请参阅 Qt New Functions 了解详细信息。

OpenGL

WITH_OPENGL (默认值: OFF

OpenGL 集成可用于与以下后端一起绘制硬件加速窗口:GTK、WIN32 和 Qt。并启用与 OpenGL 的基本互操作性,有关详细信息,请参阅 OpenGL interoperabilityOpenGL support

highgui 插件

从 OpenCV 4.5.3 开始,GTK 后端可以被构建为动态加载的插件。 以下选项可用于控制此机制:

选项 默认值 描述
HIGHGUI_ENABLE_PLUGINS ON 完全启用或禁用插件。
HIGHGUI_PLUGIN_LIST 要编译为插件的后端名称列表,用逗号或分号分隔。 支持的名称有 gtkgtk2gtk3all

在 OpenCV installation overview 中有特定插件的构建说明。

深度学习神经网络推断后端和选项 (dnn 模块)

OpenCV 有自己的 DNN 推理模块,它有自己的内置引擎,但也可以使用其他库进行优化处理。可以在单个构建中启用多个后端,在运行时自动或手动选择。

选项 默认值 描述
WITH_PROTOBUF ON 启用对 protobuf 库的搜索。OpenCV 可以构建自己的库副本或使用外部库。dnn 模块需要此依赖项,如果找不到则 dnn 模块将被禁用。
BUILD_PROTOBUF ON 构建自己的 protobuf 库副本。如果要使用外部库则必须禁用此选项。
PROTOBUF_UPDATE_FILES OFF 重新生成所有 .proto 文件。必须安装与使用的 protobuf 版本兼容的 protoc 编译器。
OPENCV_DNN_OPENCL ON 启用内置的 OpenCL 推断后端。
WITH_INF_ENGINE OFF 自 OpenVINO 2022.1 起已弃用。启用英特尔推断引擎 (Intel Inference Engine, IE)后端。允许以 IE 格式 (.xml + .bin)来运行网络。推断引擎必须作为 OpenVINO toolkit 的一部分安装,或者作为从源代码构建的独立库安装。
INF_ENGINE_RELEASE 2020040000 自 OpenVINO 2022.1 起已弃用。定义与 OpenVINO 工具包版本绑定的推断引擎库版本。必须是 10 位的字符串,例如 2020040000 对应于 OpenVINO 2020.4。
WITH_NGRAPH OFF 自 OpenVINO 2022.1 起已弃用。启用对英特尔 NGraph 库的支持。该库是推断引擎后端的一部分,它允许运行从 OpenCV 支持的多种格式的文件中读取的任意网络:Caffe、TensorFlow、PyTorch、Darknet 等。必须安装 NGraph 库,它包含在推断引擎中。
WITH_OPENVINO OFF 启用对英特尔 OpenVINO Toolkit 的支持。从 OpenVINO>=2022.1 起应该使用此选项而不是 WITH_INF_ENGINEWITH_NGRAPH
OPENCV_DNN_CUDA OFF 启用 CUDA 后端。必须安装 CUDA、CUBLAS 和 CUDNN。
WITH_HALIDE OFF 使用实验性的 Halide 后端,它可以在运行时为 dnn 层生成优化的代码。必须安装 Halide。
WITH_VULKAN OFF 启用实验性 Vulkan 后端。不需要附加依赖项,但可以使用外部 Vulkan 头文件(VULKAN_INCLUDE_DIRS)。
WITH_TENGINE OFF 为 ARM CPU 启用实验性 Tengine 后端。必须安装 Tengine 库。

安装布局

安装根目录

要安装生成的二进制文件,应该配置根位置。默认值取决于(操作系统)发行版,在 Ubuntu 中通常设置为 /usr/local。它可以在配置期间更改:

cmake -DCMAKE_INSTALL_PREFIX=/opt/opencv ../opencv

此路径可以是相对于当前工作目录的相对路径,在下面的示例中,它将设置为 /install

cmake -DCMAKE_INSTALL_PREFIX=install ../opencv

构建库后,(root / 管理员)可以使用以下命令将所有文件复制到配置的安装位置:

cmake --build . --target install

要以普通用户身份将二进制文件安装到系统位置(例如 /usr/local),必须用权限提升(sudo)来运行上面的命令:

sudo cmake --build . --target install

NOTE: 在某些平台 (Linux) 上,可以在安装期间删除符号信息。二进制文件将缩小 10-15%,但调试将受到限制:
cmake --build . --target install/strip

组件和位置

这些编译选项可以用于控制是否安装库的一部分:

选项 默认值 描述
INSTALL_C_EXAMPLES OFF 安装samples/cpp 目录中的 C++ 示例源代码。
INSTALL_PYTHON_EXAMPLES OFF 安装 samples/python 目录中的 Python 示例源代码。
INSTALL_ANDROID_EXAMPLES OFF 安装 samples/android 目录中的 Android 示例源代码。
INSTALL_BIN_EXAMPLES OFF 安装预构建的示例应用程序(必须启用 BUILD_EXAMPLES 选项)。
INSTALL_TESTS OFF 安装测试(必须启用 BUILD_TESTS 选项)。
OPENCV_INSTALL_APPS_LIST all 要安装的预构建应用程序(在 apps 目录中)的列表,用逗号或分号分隔。

以下编译选项可以修改相应组件的相对于安装前缀(install prefix)的安装位置。这些选项的默认值取决于平台和其他选项,要了解详细信息请查看 cmake/OpenCVInstallLayout.cmake 文件。

选项 组件
OPENCV_BIN_INSTALL_PATH 应用程序、动态库(win)
OPENCV_TEST_INSTALL_PATH 测试应用程序
OPENCV_SAMPLES_BIN_INSTALL_PATH 示例应用程序
OPENCV_LIB_INSTALL_PATH 动态库,导入库(win)
OPENCV_LIB_ARCHIVE_INSTALL_PATH 静态库
OPENCV_3P_LIB_INSTALL_PATH 3rdparty (第三方)库
OPENCV_CONFIG_INSTALL_PATH CMake 配置包
OPENCV_INCLUDE_INSTALL_PATH 头文件
OPENCV_OTHER_INSTALL_PATH 附加数据文件
OPENCV_SAMPLES_SRC_INSTALL_PATH 示例源代码
OPENCV_LICENSES_INSTALL_PATH 包含的 3rdparty(第三方) 组件的许可证
OPENCV_TEST_DATA_INSTALL_PATH 测试数据
OPENCV_DOC_INSTALL_PATH 文档
OPENCV_JAR_INSTALL_PATH 带有 Java 绑定的 JAR 文件
OPENCV_JNI_INSTALL_PATH Java 绑定的 JNI 部分
OPENCV_JNI_BIN_INSTALL_PATH Java 绑定的 JNI 部分的动态库

以下选项可用于更改常见场景的安装布局:

选项 默认值 描述
INSTALL_CREATE_DISTRIB OFF 调整多项以生成 Windows 和 Android 发行版。
INSTALL_TO_MANGLED_PATHS OFF 通过添加一层版本号来允许同时安装多个版本。例如,启用此选项后,头文件将安装到 /usr/include/opencv-4.4.0 而不是 /usr/include/opencv4

其他功能

选项 默认值 描述
OPENCV_ENABLE_NONFREE OFF 库中包含的一些算法已知受专利保护,在默认情况下被禁用。
OPENCV_FORCE_3RDPARTY_BUILD OFF 立即启用所有 BUILD_ 选项。
ENABLE_CCACHE ON(在类 Unix 平台上) 启用 ccache 自动检查。该工具包装编译器调用并缓存结果,可以显著地缩短重新编译的时间。
ENABLE_PRECOMPILED_HEADERS ON(对于 MSVC 编译器) 启用对预编译头文件的支持。改进构建时间。
BUILD_DOCS OFF 启用文档的构建(doxygendoxygen_cppdoxygen_pythondoxygen_javadoc 目标)。构建必须安装 Doxygen 才能构建 C++ 文档。必须安装 Python 和 BeautifulSoup4 才能构建 Python 文档。 必须安装 Javadoc 和 Ant 才能构建 Java 文档(Java SDK 的一部分)。
ENABLE_PYLINT ON(启用文档或示例时) 启用 Pylint 对 python 脚本进行检查(check_pylint 目标)。必须安装 Pylint。
ENABLE_FLAKE8 ON(启用文档或示例时) 启用 Flake8 对 python 脚本进行检查(check_flake8 目标)。必须安装 Flake8。
BUILD_JAVA ON 启用对 Java 包装器的构建。必须安装 Java SDK 和 Ant。
BUILD_FAT_JAVA_LIB ON(用于静态 Android 构建) 构建单个 opencv_java 动态库,其中包含与 Java 绑定捆绑的所有库功能。
BUILD_opencv_python2 ON 构建 python2 绑定(已弃用)。必须安装带有开发文件和 numpy 的 Python。
BUILD_opencv_python3 ON 构建 python3 绑定。必须安装带有开发文件和 numpy 的 Python。

TODO: 需要单独的教程涵盖绑定(bindings)的构建

自动化构建

一些特性是专门为自动化构建环境添加的,比如持续连续集成和打包系统。

选项 默认值 描述
ENABLE_NOISY_WARNINGS OFF 启用几个被认为是噪声(noisy)的编译器警告,它们的重要性低于其他警告。这些警告通常被忽略,但在某些情况下值得检查。
OPENCV_WARNINGS_ARE_ERRORS OFF 将编译器警告视为错误,构建将终止。
ENABLE_CONFIG_VERIFICATION OFF 对于每个启用的依赖项(WITH_ 选项),验证它是否已被找到并启用(HAVE_ 变量)。默认情况下,如果未找到依赖项,该功能将被静默关闭,但启用此选项后,CMake 配置将失败。方便需要稳定的库配置而不依赖于环境波动的打包系统。
OPENCV_CMAKE_HOOKS_DIR OpenCV 允许通过在每个阶段和子阶段添加自定义 hook 脚本来自定义配置过程。在此变量设置的目录中具有预定义名称的 CMake 脚本将包含在各个配置阶段之前和之后。文件名示例:CMAKE_INIT.cmakePRE_CMAKE_BOOTSTRAP.cmakePOST_CMAKE_BOOTSTRAP.cmake 等。其他名称没有写入文档,可以通过在项目 CMake 文件中搜索 ocv_cmake_hook 宏调用找到。
OPENCV_DUMP_HOOKS_FLOW OFF 对每个 CMake hook 脚本调用启用调试消息打印。

Contrib 模块

opencv_contrib 模块中使用了以下构建选项,如前所述,这些额外的模块可以通过设置 DOPENCV_EXTRA_MODULES_PATH 选项添加到您的最终构建中。

选项 默认值 描述
WITH_CLP OFF 将添加对 videostab 模块所需的 coinor 线性编程(coinor linear programming)库的构建支持。请确保安装 coinor-clp 的开发库。

尚未写入文档的其它选项

BUILD_ANDROID_PROJECTS BUILD_ANDROID_EXAMPLES ANDROID_HOME ANDROID_SDK ANDROID_NDK ANDROID_SDK_ROOT

CMAKE_TOOLCHAIN_FILE

WITH_CAROTENE WITH_CPUFEATURES WITH_EIGEN WITH_OPENVX WITH_DIRECTX WITH_VA WITH_LAPACK WITH_QUIRC BUILD_ZLIB BUILD_ITT WITH_IPP BUILD_IPP_IW

你可能感兴趣的:(计算机视觉,opencv,计算机视觉,人工智能)