OpenCV 配置选项参考(二)

发布时间:2024年01月09日

功能特性和依赖关系

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

cmake -LH ../opencv

选项命名约定

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

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

启用选项时:WITH_

  • 如果启用选项,将构建并启用第三方库 => 设置为BUILD_HAVE_ON
  • 如果禁用选项,则将检测到并启用第三方库(如果找到 => 设置为“如果找到依赖项”BUILD_HAVE_ON

异构计算

CUDA 支持

WITH_CUDA(默认:OFF)

许多算法已经使用 CUDA 加速实现,这些函数位于单独的模块中。CUDA 工具包必须从官方 NVIDIA 站点安装,作为先决条件。对于早于 3.9 的 cmake 版本,OpenCV 使用自己的脚本,对于较新的版本 - 与 CMake 打包的脚本。其他选项可用于控制构建过程,例如 或。这些参数尚未记录,详情请查阅脚本。cmake/FindCUDA.cmakeCUDA_GENERATIONCUDA_ARCH_BINcmake/OpenCVDetectCUDA.cmake

注意

从 OpenCV 4.0 版开始,所有 CUDA 加速算法实现都已移至?opencv_contrib?存储库。要同时构建?opencv?和?opencv_contrib,请选中使用额外模块构建

可以在相应的部分找到一些教程:?GPU 加速计算机视觉(cuda 模块)

另请参阅

CUDA 加速计算机视觉

https://en.wikipedia.org/wiki/CUDA

TODO:其他选项:、、?WITH_CUFFTWITH_CUBLASWITH_NVCUVID

OpenCL 支持

WITH_OPENCL(默认值:ON)

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

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

另请参阅

https://en.wikipedia.org/wiki/OpenCL

TODO:其他选项:、、、、WITH_OPENCL_SVMWITH_OPENCLAMDFFTWITH_OPENCLAMDBLASWITH_OPENCL_D3D11_NVWITH_VA_INTEL

图像读写(imgcodecs 模块)

内置格式

OpenCV 可以在没有任何第三方库帮助的情况下读取以下格式:

PNG、JPEG、TIFF、WEBP 支持

格式选择违约强制构建自己
巴布亚新几内亚WITH_PNGBUILD_PNG
JPEG格式WITH_JPEGBUILD_JPEG
TIFF格式WITH_TIFFBUILD_TIFF
网络WITH_WEBPBUILD_WEBP
使用 OpenJPEG 进行JPEG2000WITH_OPENJPEGBUILD_OPENJPEG
与 JasPer JPEG2000WITH_JASPER(见注释)BUILD_JASPER
EXR的WITH_OPENEXRBUILD_OPENEXR

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

注意

OpenJPEG 的优先级高于已弃用的 JasPer。为了使用 JasPer,必须禁用 OpenJPEG。

GDAL集成

WITH_GDAL(默认:OFF)

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

GDCM集成

WITH_GDCM(默认:OFF)

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

视频读写(videoio模块)

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

Video4Linux的

WITH_V4L(Linux;默认值:ON?)

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

FFmpeg的

WITH_FFMPEG(默认值:ON)

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

  • AVCODEC解码器
  • AVVonfig
  • 阿武蒂尔
  • 斯瓦斯卡
  • avresample(可选)

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

注意

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

GStreamer(GS特雷默)

WITH_GSTREAMER(默认值:ON)

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

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

Microsoft 媒体基金会

WITH_MSMF(Windows;默认值:ON)

启用使用 Windows 内置媒体基础框架的 MSMF 后端。可用于从相机捕获帧,解码和编码视频文件。此后端具有硬件加速处理支持(选项,默认为?ON)。WITH_MSMF_DXVA

注意

旧版本的 Windows(10 之前的版本)可能具有不兼容的 Media Foundation 版本,并且已知从 OpenCV 使用时会出现问题。

DirectShow(直接显示)

WITH_DSHOW(Windows;默认值:ON)

此后端使用较旧的DirectShow框架。它只能用于从相机捕获帧。它现在已被弃用,取而代之的是 MSMF 后端,尽管两者都可以在同一版本中启用。

AV发布

WITH_AVFOUNDATION(Apple;默认值:ON)

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

其他后端

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

选择违约描述
WITH_1394使用 DC1394 库的?IIDC IEEE1394支持
WITH_OPENNI关闭OpenNI?可用于 从 深度 感应 相机 采集 数据。荒废的。
WITH_OPENNI2关闭OpenNI2?可用于从深度感应相机捕获数据。
WITH_PVAPI关闭PVAPI?是用于 Prosilica GigE 相机的旧版 SDK。荒废的。
WITH_ARAVIS关闭Aravis?库用于使用 Genicam 相机进行视频采集。
WITH_XIMEA关闭XIMEA?相机支持。
WITH_XINE关闭XINE?库支持。
WITH_LIBREALSENSE关闭RealSense?摄像头支持。
WITH_MFX关闭MediaSDK?库可用于原始视频流的硬件加速解码和编码。
WITH_GPHOTO2关闭GPhoto?库可用于从相机获取帧。
WITH_ANDROID_MEDIANDKMediaNDK?库自 API 级别 21 起在 Android 上可用。

VideoIO插件

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

选择违约描述
VIDEOIO_ENABLE_PLUGINS完全启用或禁用插件。
VIDEOIO_PLUGIN_LIST以逗号或分号分隔的要编译为插件的后端名称列表。支持的名称包括?ffmpeggstreamermsmfmfx?和?all

查看?OpenCV 安装概述,了解独立插件构建说明。

并行处理

一些 OpenCV 算法可以使用多线程来加速处理。OpenCV 可以使用线程后端之一进行构建。

后端选择违约平台描述
线程WITH_PTHREADS_PF类 Unix基于?pthreads?库的默认后端可在 Linux、Android 和其他类 Unix 平台上使用。线程池是在OpenCV中实现的,可以通过环境变量进行控制。有关详细信息,请查看?modules/core/src/parallel_impl.cpp?文件中的源代码。OPENCV_THREAD_POOL_*
并发不适用窗户并发运行时在 Windows 上可用,除非启用了其他后端,否则将在支持的平台上打开
最大公约数不适用苹果Grand Central Dispatch?可在 Apple 平台上使用,除非启用其他后端,否则将自动打开。使用全局系统线程池。
待定WITH_TBB关闭倍数线程构建块是一个用于并行编程的跨平台库。
OpenMPWITH_OPENMP关闭倍数OpenMPAPI 依赖于编译器支持。
HPX型WITH_HPX关闭倍数高性能 ParallelX?是一个实验性的后端,更适合多处理器环境。

注意

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

线程插件

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

选择违约描述
PARALLEL_ENABLE_PLUGINS启用插件支持,如果禁用此选项,OpenCV 将不会尝试加载任何内容

查看?OpenCV 安装概述,了解独立插件构建说明。

GUI 后端(highgui 模块)

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

选择违约平台描述
WITH_GTKLinux操作系统GTK?是 Linux 和类 Unix 操作系统中的常用工具包。默认情况下,如果找到,将使用版本 3,可以使用该选项强制使用版本 2。WITH_GTK_2_X
WITH_WIN32UI窗户WinAPI?是 Windows 中的标准 GUI API。
不适用macOS操作系统Cocoa?是 macOS 中使用的框架。
WITH_QT关闭跨平台Qt是一个跨平台的GUI框架。

注意

使用 Qt 支持编译的 OpenCV 启用了高级?highgui?界面,有关详细信息,请参见?Qt New Functions

OpenGL的

WITH_OPENGL(默认:OFF)

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

HighGUI 插件

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

选择违约描述
HIGHGUI_ENABLE_PLUGINS完全启用或禁用插件。
HIGHGUI_PLUGIN_LIST以逗号或分号分隔的要编译为插件的后端名称列表。支持的名称包括?gtk、gtk2、gtk3?和?all

查看?OpenCV 安装概述,了解独立插件构建说明。

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

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

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

安装布局

安装根目录

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

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

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

cmake -DCMAKE_INSTALL_PREFIX=安装 ../opencv

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

cmake --构建。--target 安装

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

sudo cmake --build 。--target 安装

注意

在某些平台 (Linux) 上,可以在安装过程中删除符号信息。二进制文件将缩小 10-15%,但调试将受到限制:

cmake --构建。--目标安装/剥离

组件和位置

选项 cane 用于控制是否安装库的一部分:

选择违约描述
INSTALL_C_EXAMPLES关闭从?samples/cpp?目录安装 C++ 示例源。
INSTALL_PYTHON_EXAMPLES关闭从?samples/python?目录安装 Python 示例源。
INSTALL_ANDROID_EXAMPLES关闭从?samples/android?目录安装 Android 示例源。
INSTALL_BIN_EXAMPLES关闭安装预构建的示例应用程序(必须启用)。BUILD_EXAMPLES
INSTALL_TESTS关闭安装测试(必须启用)。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_PATHCMake 配置包
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_PATHJava 绑定的 JNI 部分
OPENCV_JNI_BIN_INSTALL_PATH来自 Java 绑定的 JNI 部分的动态库

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

选择违约描述
INSTALL_CREATE_DISTRIB关闭调整多个内容以生成 Windows 和 Android 发行版。
INSTALL_TO_MANGLED_PATHS关闭将一个级别添加到多个安装位置,以允许并行安装。例如,启用此选项后,标头将安装到 _/usr/include/opencv-4.4.0_ 而不是 _/usr/include/opencv4_。

其他功能

选择违约描述
OPENCV_ENABLE_NONFREE关闭已知库中包含的某些算法受专利保护,默认情况下处于禁用状态。
OPENCV_FORCE_3RDPARTY_BUILD关闭一次启用所有选项。BUILD_
OPENCV_IPP_ENABLE_ALL关闭一次启用所有选项。OPENCV_IPP_
ENABLE_CCACHEON(在类 Unix 平台上)启用?ccache?自动检测。该工具包装编译器调用并缓存结果,可以显著缩短重新编译时间。
ENABLE_PRECOMPILED_HEADERSON(用于 MSVC)启用预编译标头支持。缩短了构建时间。
BUILD_DOCS关闭启用文档构建(doxygendoxygen_cppdoxygen_python?doxygen_javadoc目标)。必须安装?Doxygen?才能构建 C++ 文档。必须安装 Python 和?BeautifulSoup4?才能构建 Python 文档。必须安装 Javadoc 和 Ant 才能构建 Java 文档(Java SDK 的一部分)。
ENABLE_PYLINTON(启用文档或示例时)使用?Pylintcheck_pylint目标)启用 python 脚本检查。必须安装 Pylint。
ENABLE_FLAKE8ON(启用文档或示例时)使用?Flake8check_flake8目标)启用 python 脚本检查。必须安装 Flake8。
BUILD_JAVA启用 Java 包装器构建。必须安装 Java SDK 和 Ant。
BUILD_FAT_JAVA_LIBON(适用于静态 Android 版本)构建单个opencv_java动态库,其中包含与 Java 绑定捆绑在一起的所有库功能。
BUILD_opencv_python2构建 python2 绑定(已弃用)。必须安装带有开发文件和 numpy 的 Python。
BUILD_opencv_python3生成 python3 绑定。必须安装带有开发文件和 numpy 的 Python。
CAROTENE_NEON_ARCH'(自动)'将霓虹灯拱门切换为胡萝卜素。如果它没有设置任何内容,它将被自动检测。如果设置为 8,则使用 ARMv8(及更高版本)。否则,将使用 ARMv7。

TODO:需要单独的教程来涵盖绑定构建

自动构建

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

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

Contrib 模块

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

选择违约描述
WITH_CLP关闭将添加模块中所需的?coinor?线性规划库构建支持。确保安装 coinor-clp 的开发库。videostab

文章来源:https://blog.csdn.net/2301_81888214/article/details/135455866
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。