OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
OpenCV 配置选项参考

上一教程: OpenCV 安装概述
下一教程: OpenCV 环境变量参考

简介

注意
我们假设您已阅读 OpenCV 安装概述 教程或具有 CMake 使用经验。

配置选项可以通过多种方式设置

  • 命令行:cmake -Doption=value ...
  • 初始缓存文件:cmake -C my_options.txt ...
  • 通过 GUI 交互式设置

在本参考中,我们将使用常规命令行。

大多数选项可以在 OpenCV 的根 cmake 脚本中找到:opencv/CMakeLists.txt。一些选项可以在特定模块中定义。

可以使用 CMake 工具打印所有可用选项

# 初始配置
cmake ../opencv
# 打印所有选项
cmake -L
# 打印所有带帮助信息的选项
cmake -LH
# 打印所有选项,包括高级选项
cmake -LA

最常用和最有用的选项以 WITH_, ENABLE_, BUILD_, OPENCV_ 开头。

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

通用选项

构建额外的模块

OPENCV_EXTRA_MODULES_PATH 选项包含一个以分号分隔的目录列表,这些目录包含将添加到构建中的额外模块。模块目录必须具有兼容的布局和 CMakeLists.txt,简要说明可在 编码风格指南 中找到。

示例

# 使用 opencv_contrib 中的所有模块进行构建
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
# 使用 opencv_contrib 中的一个模块进行构建
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/bgsegm ../opencv
# 使用两个自定义模块进行构建 (在 bash 中分号必须转义)
cmake -DOPENCV_EXTRA_MODULES_PATH=../my_mod1\;../my_mod2 ../opencv
注意
仅支持 0 级和 1 级深度的模块位置,以下命令将引发错误
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib ../opencv

使用 C++ 标准设置进行构建

CMAKE_CXX_STANDARD 选项可用于设置 OpenCV 构建的 C++ 标准。

cmake -DCMAKE_CXX_STANDARD=17 ../opencv
cmake --build .
  • C++11 是 OpenCV 4.x 的默认/必需/推荐标准。C++17 是 OpenCV 5.x 的默认/必需/推荐标准。
  • 如果您的编译器不支持所需的 C++ 标准特性,OpenCV 配置将失败。
  • 如果您设置的 C++ 标准版本低于要求,OpenCV 配置将失败。为了解决这个问题,可以使用 OPENCV_SKIP_CMAKE_CXX_STANDARD 选项跳过 CMAKE_CXX_STANDARD 版本检查。
  • 如果您设置的 C++ 标准版本高于推荐版本,可能会出现大量警告或 OpenCV 构建可能失败。

调试构建

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

在某些平台(例如 Linux)上,构建类型必须在配置阶段设置

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

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

cmake <options> ../opencv
cmake --build . --config Debug

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

可以使用 CV_DISABLE_OPTIMIZATION 选项禁用多种优化

  • 某些第三方库(例如 IPP, Lapack, Eigen)
  • 显式矢量化实现(通用内部函数,原始内部函数等)
  • 分派优化
  • 显式循环展开
另请参阅
https://cmake.com.cn/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_macros.html
https://github.com/opencv/opencv/wiki/CPU-optimizations-build-options

静态构建

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

示例

cmake -DBUILD_SHARED_LIBS=OFF ../opencv
另请参阅
https://en.wikipedia.org/wiki/Static_library

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

另请参阅
https://en.wikipedia.org/wiki/Position-independent_code

生成 pkg-config 信息

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

示例

cmake -DOPENCV_GENERATE_PKGCONFIG=ON ../opencv
注意
由于配置过程的复杂性,生成的 .pc 文件可能包含不完整的第三方依赖项列表,并且在某些配置中可能无法工作,尤其是对于静态构建。此功能自 4.x 版本起未正式支持,并且默认情况下禁用。

构建测试、示例和应用程序

测试有两种:准确性测试 (opencv_test_*) 和性能测试 (opencv_perf_*)。默认情况下,测试和应用程序是启用的。示例默认情况下不构建,需要显式启用。

相应的 cmake 选项

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

构建有限的模块集

每个模块都是 modules 目录的一个子目录。可以禁用一个模块

cmake -DBUILD_opencv_calib3d=OFF ../opencv

相反的选项是只构建指定的模块以及它们所依赖的所有模块

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

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

-- OpenCV 模块
-- 将构建:calib3d core features2d flann highgui imgcodecs imgproc ts videoio

已下载的依赖项

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

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

如果通过代理访问,则应在运行 cmake 之前设置相应的环境变量

export http_proxy=<proxy-host>:<port>
export https_proxy=<proxy-host>:<port>

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

CPU 优化级别

在 x86_64 机器上,库默认会为 SSE3 指令集级别编译。此级别可以通过配置选项更改

cmake -DCPU_BASELINE=AVX2 ../opencv
注意
其他平台有自己的指令集级别:ARM 上的 VFPV3NEON,PowerPC 上的 VSX

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

cmake -DCPU_DISPATCH=AVX,AVX2 ../opencv

要禁用调度机制,此选项应设置为空值

cmake -DCPU_DISPATCH= ../opencv

可以禁用代码的优化部分以进行故障排除和调试

# 禁用通用内部函数
cmake -DCV_ENABLE_INTRINSICS=OFF ../opencv
# 禁用所有可能的内置优化
cmake -DCV_DISABLE_OPTIMIZATION=ON ../opencv
注意
有关 CPU 优化选项的更多详细信息,请参见 wiki:https://github.com/opencv/opencv/wiki/CPU-optimizations-build-options

性能分析、覆盖率、清理、强化、大小优化

以下选项可用于生成带有仪器或增强安全性的特殊构建。所有选项默认禁用。

选项编译器描述
ENABLE_PROFILING GCC 或 Clang启用性能分析编译器和链接器选项。
ENABLE_COVERAGE GCC 或 Clang启用代码覆盖率支持。
OPENCV_ENABLE_MEMORY_SANITIZER 不适用在代码中启用一些怪癖以协助内存清理程序。
ENABLE_BUILD_HARDENING GCC, Clang, MSVC启用编译器选项,以减少代码被利用的可能性。
ENABLE_LTO GCC, Clang, MSVC启用链接时间优化 (LTO)。
ENABLE_THIN_LTO Clang启用 thin LTO,将中间位码合并到二进制文件中,允许消费者稍后优化其应用程序。
OPENCV_ALGO_HINT_DEFAULT 任何设置默认 OpenCV 实现提示值:ALGO_HINT_ACCURATEALGO_HINT_APPROX。危险!此选项全局改变行为,可能会影响许多算法的准确性。
另请参阅
GCC 仪器
构建强化
过程间优化
链接时间优化
ThinLTO

启用 IPP 优化

以下选项可用于启用每个函数的 IPP 优化,但这会增加 opencv 库的大小。所有选项默认禁用。

选项函数+ 大致大小
OPENCV_IPP_GAUSSIAN_BLUR GaussianBlur()+8Mb
OPENCV_IPP_MEAN mean() / meanStdDev()+0.2Mb
OPENCV_IPP_MINMAX minMaxLoc() / minMaxIdx()+0.2Mb
OPENCV_IPP_SUM sum()+0.1Mb

功能特性和依赖项

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

cmake -LH ../opencv

选项命名约定

有三种用于控制库依赖项的选项,它们具有不同的前缀

  • WITH_ 开头的选项启用或禁用依赖项
  • BUILD_ 开头的选项启用或禁用构建和使用与 OpenCV 捆绑的第三方库
  • HAVE_ 开头的选项表示已启用依赖项,如果无法自动检测,可用于手动启用依赖项。

WITH_ 选项启用时

  • 如果 BUILD_ 选项已启用,则将构建并启用第三方库 => HAVE_ 设置为 ON
  • 如果 BUILD_ 选项已禁用,则将检测并启用第三方库(如果找到) => 如果找到依赖项,HAVE_ 设置为 ON

异构计算

CUDA 支持

WITH_CUDA (默认: OFF)

许多算法已使用 CUDA 加速实现,这些函数位于单独的模块中。CUDA 工具包必须作为先决条件从 NVIDIA 官方网站安装。对于早于 3.9 的 cmake 版本,OpenCV 使用自己的 cmake/FindCUDA.cmake 脚本,对于较新的版本,则使用 CMake 打包的版本。可以使用其他选项来控制构建过程,例如 CUDA_GENERATIONCUDA_ARCH_BIN。这些参数尚未文档化,请查阅 cmake/OpenCVDetectCUDA.cmake 脚本以获取详细信息。

注意
自 OpenCV 4.0 版本起,所有 CUDA 加速算法实现都已移至 opencv_contrib 存储库。要同时构建 opencvopencv_contrib,请查看 构建额外的模块
一些教程可以在相应的章节中找到:GPU 加速计算机视觉 (cuda 模块)
另请参阅
CUDA 加速计算机视觉
https://en.wikipedia.org/wiki/CUDA

待办事项:其他选项:WITH_CUFFT, WITH_CUBLAS, WITH_NVCUVID

OpenCL 支持

WITH_OPENCL (默认: ON)

多个 OpenCL 加速算法可通过所谓的“透明 API (T-API)”获得。这种集成在用户级别上使用与常规 CPU 实现相同的函数。如果输入和输出图像参数作为不透明的 cv::UMat 对象传递,则切换到 OpenCL 执行分支。更多信息可以在 简要介绍OpenCL 支持 中找到

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

另请参阅
https://en.wikipedia.org/wiki/OpenCL

待办事项:其他选项:WITH_OPENCL_SVM, WITH_OPENCLAMDFFT, WITH_OPENCLAMDBLAS, WITH_OPENCL_D3D11_NV, WITH_VA_INTEL

图像读写 (imgcodecs 模块)

内置格式

以下格式无需任何第三方库即可由 OpenCV 读取

格式选项默认
BMP (始终)ON
HDR WITH_IMGCODEC_HDR ON
Sun Raster WITH_IMGCODEC_SUNRASTER ON
PPM, PGM, PBM, PAM WITH_IMGCODEC_PXM ON
PFM WITH_IMGCODEC_PFM ON
GIF WITH_IMGCODEC_GIF ON

PNG, JPEG, TIFF, WEBP, JPEG 2000, EXR, JPEG XL 支持

格式选项默认强制构建自己的
PNG libpng WITH_PNG ON BUILD_PNG
libspng(简单 png) WITH_SPNG OFF BUILD_SPNG
JPEG libjpeg-turbo WITH_JPEG ON BUILD_JPEG
libjpeg WITH_JPEG OFF BUILD_JPEGBUILD_JPEG_TURBO_DISABLE
TIFF LibTIFF WITH_TIFF ON BUILD_TIFF
WebP WITH_WEBP ON BUILD_WEBP
JPEG 2000 OpenJPEG WITH_OPENJPEG ON BUILD_OPENJPEG
JasPer WITH_JASPER ON (参见注释)BUILD_JASPER
OpenEXR WITH_OPENEXR ON BUILD_OPENEXR
JPEG XL WITH_JPEGXL ON 不支持。(参见注释)

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

注意
(全部) 每种图像格式只能启用一个库(例如,要使用 JasPer 处理 JPEG 2000 格式,必须禁用 OpenJPEG)。
(JPEG 2000) OpenJPEG 优先于已弃用的 JasPer。
(JPEG XL) OpenCV 不包含 libjxl 源代码,因此不支持 BUILD_JPEGXL
警告
OpenEXR 2.2 版或更早版本不能与 C++17 或更高版本结合使用。在这种情况下,需要更新 OpenEXR 2.3.0 版或更高版本。

GDAL 集成

WITH_GDAL (默认: OFF)

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

GDCM 集成

WITH_GDCM (默认: OFF)

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

视频读写 (videoio 模块)

待办事项:videoio 如何工作,注册表,优先级

Video4Linux

WITH_V4L (Linux; 默认: ON)

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

FFmpeg

WITH_FFMPEG (默认: ON)

FFmpeg 库集成,用于解码和编码视频文件和网络流。该库可以读取和写入许多流行的视频格式。它由几个组件组成,必须作为构建的先决条件安装

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

Windows 平台是一个例外,其中预构建的 包含 FFmpeg 的插件库 将在配置阶段下载并复制到 bin 文件夹,以及所有生成的库。

注意
Libav 库可以代替 FFmpeg 使用,但这种组合并未积极支持。

GStreamer

WITH_GSTREAMER (默认: ON)

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

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

Microsoft Media Foundation

WITH_MSMF (Windows; 默认: ON)

启用 MSMF 后端,它使用 Windows 内置的 Media Foundation 框架。可用于从摄像头捕获帧、解码和编码视频文件。此后端支持硬件加速处理 (WITH_MSMF_DXVA 选项,默认 ON)。

注意
较旧版本的 Windows (10 之前) 可能具有不兼容的 Media Foundation 版本,并且已知在使用 OpenCV 时存在问题。

DirectShow

WITH_DSHOW (Windows; 默认: ON)

此后端使用较旧的 DirectShow 框架。它只能用于从摄像头捕获帧。现在已弃用,以支持 MSMF 后端,尽管两者可以在同一个构建中启用。

AVFoundation

WITH_AVFOUNDATION (Apple; 默认: ON)

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

其他后端

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

选项默认描述
WITH_1394 OFF 使用 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 级别 21 起,Android 上提供 MediaNDK 库。

videoio 插件

自 4.1.0 版本起,一些 videoio 后端可以作为插件构建,从而打破了对第三方库的严格依赖,使其在运行时成为可选。以下选项可用于控制此机制

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

有关独立插件构建说明,请查看 OpenCV 安装概述

并行处理

OpenCV 的某些算法可以使用多线程来加速处理。OpenCV 可以使用其中一个线程后端构建。

后端选项默认平台描述
pthreadsWITH_PTHREADS_PF ON 类 Unix基于 pthreads 库的默认后端在 Linux、Android 和其他类 Unix 平台上可用。线程池在 OpenCV 中实现,可以通过环境变量 OPENCV_THREAD_POOL_* 进行控制。有关详细信息,请查看 modules/core/src/parallel_impl.cpp 文件中的源代码。
并发不适用ON Windows并发运行时 在 Windows 上可用,除非启用其他后端,否则将在支持的平台上自动打开。
GCD不适用ON Apple大中央调度 在 Apple 平台上可用,除非启用其他后端,否则将自动打开。使用全局系统线程池。
TBBWITH_TBB OFF 多平台线程构建块 是一个用于并行编程的跨平台库。
OpenMPWITH_OPENMP OFF 多平台OpenMP API 依赖于编译器支持。
HPXWITH_HPX OFF 多平台高性能 ParallelX 是一个实验性后端,更适合多处理器环境。
注意
OpenCV 可以从 GitHub 下载并构建 TBB 库,此功能可以通过 BUILD_TBB 选项启用。

线程插件

自 4.5.2 版本起,OpenCV 支持动态加载线程后端。目前仅支持单独编译过程:首先您必须使用某个 默认 并行后端(例如 pthreads)构建 OpenCV,然后构建每个插件并将生成的二进制文件复制到 libbin 文件夹。

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

有关独立插件构建说明,请查看 OpenCV 安装概述

GUI 后端 (highgui 模块)

OpenCV 依赖各种 GUI 库进行窗口绘制。

选项默认平台描述
WITH_GTK ON LinuxGTK 是 Linux 和类 Unix 操作系统中的常用工具包。默认情况下,如果找到版本 3,将使用版本 3;可以通过 WITH_GTK_2_X 选项强制使用版本 2。
WITH_WIN32UI ON WindowsWinAPI 是 Windows 中的标准 GUI API。
不适用ON macOSCocoa 是 macOS 中使用的框架。
WITH_QT OFF 跨平台Qt 是一个跨平台 GUI 框架。
WITH_FRAMEBUFFER OFF Linux使用 Linux framebuffer 的实验性后端。功能有限,但不需要依赖项。
WITH_FRAMEBUFFER_XVFB OFF Linux启用 FRAMEBUFFER 后端与 xvfb 工具兼容的特殊输出模式。需要一些 X11 头文件。
注意
OpenCV 编译时带有 Qt 支持,启用高级 highgui 接口,详见 Qt 新功能

OpenGL

WITH_OPENGL (默认: OFF)

OpenGL 集成可用于通过以下后端绘制硬件加速窗口:GTK、WIN32 和 Qt。并启用与 OpenGL 的基本互操作性,详见 OpenGL 互操作性OpenGL 支持

highgui 插件

自 OpenCV 4.5.3 起,GTK 后端可以作为动态加载插件构建。以下选项可用于控制此机制

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

有关独立插件构建说明,请查看 OpenCV 安装概述

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

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

选项默认描述
WITH_PROTOBUF ON 启用 protobuf 库搜索。OpenCV 可以构建自己的库副本或使用外部库。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 工具包 的一部分安装,或从源代码构建为独立库。
INF_ENGINE_RELEASE 2020040000 自 OpenVINO 2022.1 起已弃用 定义与 OpenVINO 工具包版本绑定的推理引擎库版本。必须是 10 位字符串,例如 OpenVINO 2020.4 的 2020040000
WITH_NGRAPH OFF 自 OpenVINO 2022.1 起已弃用 启用 Intel NGraph 库支持。此库是推理引擎后端的一部分,允许执行从 OpenCV 支持的多种格式文件(Caffe、TensorFlow、PyTorch、Darknet 等)读取的任意网络。必须安装 NGraph 库,它包含在推理引擎中。
WITH_OPENVINO OFF 启用 Intel OpenVINO 工具包支持。对于 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)。

安装布局

安装根目录

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

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

此路径可以是相对于当前工作目录的,在以下示例中它将设置为 <absolute-path-to-build>/install

cmake -DCMAKE_INSTALL_PREFIX=install ../opencv

构建库后,可以使用以下命令将所有文件复制到配置的安装位置

cmake --build . --target install

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

sudo cmake --build . --target install
注意
在某些平台(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 所有 以逗号或分号分隔的要安装的预构建应用程序列表(来自 apps 目录)

以下选项允许相对于安装前缀修改组件的安装位置。这些选项的默认值取决于平台和其他选项,请查看 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 第三方库
OPENCV_CONFIG_INSTALL_PATH cmake 配置包
OPENCV_INCLUDE_INSTALL_PATH 头文件
OPENCV_OTHER_INSTALL_PATH 额外数据文件
OPENCV_SAMPLES_SRC_INSTALL_PATH 示例源代码
OPENCV_LICENSES_INSTALL_PATH 包含的第三方组件的许可证
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_ 选项。
OPENCV_IPP_ENABLE_ALL OFF 一次性启用所有 OPENCV_IPP_ 选项。
ENABLE_CCACHE ON (在类 Unix 平台上)启用 ccache 自动检测。此工具封装了编译器调用并缓存结果,可以显著提高重新编译时间。
ENABLE_PRECOMPILED_HEADERS ON (对于 MSVC)启用预编译头文件支持。提高构建时间。
BUILD_DOCS OFF 启用文档构建 (doxygen, doxygen_cpp, doxygen_python, doxygen_javadoc 目标)。对于 C++ 文档构建,必须安装 Doxygen。对于 Python 文档构建,必须安装 Python 和 BeautifulSoup4。对于 Java 文档构建,必须安装 Javadoc 和 Ant(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 构建)构建包含所有库功能和 Java 绑定的单个 opencv_java 动态库。
BUILD_opencv_python2 ON 构建 python2 绑定(已弃用)。必须安装带有开发文件和 numpy 的 Python。
BUILD_opencv_python3 ON 构建 python3 绑定。必须安装带有开发文件和 numpy 的 Python。

待办事项:需要单独的教程来涵盖绑定构建

自动化构建

添加了一些专门用于自动化构建环境的功能,例如持续集成和打包系统。

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

Contrib 模块

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

选项默认描述
WITH_CLP OFF 将添加 videostab 模块所需的 coinor 线性规划库构建支持。请确保安装 coinor-clp 的开发库。

其他未记录的选项

BUILD_ANDROID_PROJECTS BUILD_ANDROID_EXAMPLES ANDROID_HOME ANDROID_SDK ANDROID_NDK ANDROID_SDK_ROOT

CMAKE_TOOLCHAIN_FILE

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