OpenCV 功能特性和依赖关系
有许多可选的依赖项和功能可以打开或关闭。CMake 具有特殊选项,允许打印所有可用的配置参数:
cmake -LH …/opencv
选项命名约定
有三种选项用于控制库的依赖项,它们具有不同的前缀:
- 以启用或禁用依赖项开头的选项
WITH_ - 从启用或禁用构建和使用与 OpenCV 捆绑在一起的第三方库开始的选项
BUILD_ - 以
HAVE_开头的选项表示已启用依赖项,如果无法使用自动检测,则可用于手动启用依赖项。
启用选项时:WITH_
- 如果启用选项,将构建并启用第三方库 => 设置为
BUILD_和HAVE_为ON - 如果禁用选项,则将检测到并启用第三方库(如果找到)=> 设置为
BUILD_和HAVE_为OFF(除非强制构建)
异构计算
CUDA 支持
WITH_CUDA(默认:OFF)
许多算法已经使用 CUDA 加速实现,这些函数位于单独的模块中。CUDA 工具包必须从官方 NVIDIA 站点安装,作为先决条件。对于早于 3.9 的 CMake 版本,OpenCV 使用自己的脚本,对于较新的版本 - 与 CMake 打包的脚本。其他选项可用于控制构建过程,例如 cmake/FindCUDA.cmake 或 cmake/OpenCVDetectCUDA.cmake。这些参数尚未记录,详情请查阅脚本。
注意 从 OpenCV 4.0 版开始,所有 CUDA 加速算法实现都已移至 opencv_contrib 存储库。要同时构建 opencv 和 opencv_contrib,请选中相关选项。
可以在相应的部分找到一些教程。
另请参阅:CUDA
待补充选项:WITH_CUFFT, WITH_CUBLAS, WITH_NVCUVID
OpenCL 支持
WITH_OPENCL(默认值:ON)
多种 OpenCL 加速算法可通过所谓的'透明 API(T-API)'获得。此集成在用户级别使用与常规 CPU 实现相同的功能。如果输入和输出图像参数作为不透明的对象传递,则切换到 OpenCL 执行分支。更多信息可以在源代码中找到。
在生成时,此功能没有任何先决条件。在运行时,需要一个有效的 OpenCL 运行时,以检查它的运行和/或命令。OpenCL 集成的某些参数可以使用环境变量进行修改,例如 OPENCV_OPENCL_DEVICE。但是,目前还没有关于此功能的完整文档,因此请查看文件中的源代码以获取详细信息。
另请参阅:OpenCL
待补充选项:WITH_OPENCL_SVM, WITH_OPENCLAMDFFT, WITH_OPENCLAMDBLAS, WITH_OPENCL_D3D11_NV, WITH_VA_INTEL
图像读写(imgcodecs 模块)
内置格式
OpenCV 可以在没有任何第三方库帮助的情况下读取以下格式:
- HDR (
WITH_IMGCODEC_HDR) - SUNRASTER (
WITH_IMGCODEC_SUNRASTER) - PPM, PXM, 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 |
| OpenJPEG | WITH_OPENJPEG | ON | BUILD_OPENJPEG |
| JasPer | WITH_JASPER | ON | BUILD_JASPER |
| OpenEXR | WITH_OPENEXR | ON | BUILD_OPENEXR |
读取这些格式的图像所需的所有库都包含在 OpenCV 中,如果在配置阶段找不到,将自动构建。相应的选项将强制构建和使用自己的库,它们在某些平台上默认启用,例如 Windows。
注意 OpenJPEG 的优先级高于已弃用的 JasPer。为了使用 JasPer,必须禁用 OpenJPEG。
GDAL 集成
WITH_GDAL(默认:OFF)
GDAL 是一个更高级别的库,支持读取多种文件格式,包括 PNG、JPEG 和 TIFF。打开文件时,它将具有更高的优先级,并且可以覆盖其他后端。该库将使用 cmake 包机制进行搜索,确保安装正确或手动设置环境或 cmake 变量。
GDCM 集成
WITH_GDCM(默认:OFF)
通过 GDCM 启用医学图像格式支持。该库将使用 cmake 包机制进行搜索,确保安装正确或手动设置环境或 cmake 变量。
构建最佳实践
为了确保 OpenCV 能够顺利编译并发挥最大性能,建议遵循以下原则:
- 依赖管理:优先使用系统包管理器(如 apt, yum, brew)安装常用库,减少编译时间。
- 并行编译:使用
-j参数指定线程数,加快构建速度。 - 调试模式:开发阶段建议开启 Debug 模式以便排查问题。
- 模块选择:根据项目需求启用特定模块,避免引入不必要的依赖。
- 日志检查:构建过程中仔细检查 CMake 输出的日志,确认关键依赖是否被正确识别。
通过合理配置上述选项,可以灵活定制符合项目需求的 OpenCV 构建版本。


