跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++AI算法

OpenCV CMake 构建配置选项详细参考

综述由AI生成OpenCV 构建过程中的 CMake 配置选项。内容涵盖常规选项设置、调试与静态构建方法、pkg-config 生成、测试与示例构建控制、模块选择策略、依赖项下载管理以及 CPU 优化级别的配置。同时列出了安全性增强选项(如 LTO、Hardening)和 IPP 优化参数,并补充了 TBB、OpenMP、CUDA 等第三方库集成的常见配置方法。文章旨在帮助开发者根据具体需求定制 OpenCV 编译环境,平衡性能、大小与兼容性。

古灵精怪发布于 2025/2/7更新于 2026/6/223 浏览
OpenCV CMake 构建配置选项详细参考

OpenCV CMake 构建配置选项详细参考

介绍

注意:我们假设您已经阅读了相关教程或具有使用 CMake 的经验。

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

  • 命令行:cmake -Doption=value ...
  • 初始缓存文件:cmake -C my_options.txt ...
  • 通过 GUI 进行交互(如 ccmake 或 cmake-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

调试生成

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

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

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++ 库将在调试模式下使用,例如在向量元素访问期间将绑定检查索引。

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

  • 显式矢量化实现(通用内部函数、原始内部函数等)
  • 调度优化
  • 显式循环展开

另请参阅:

  • CMAKE_BUILD_TYPE
  • libstdc++ manual
  • CPU-optimizations-build-options

静态构建

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

例:

cmake -DBUILD_SHARED_LIBS=OFF ../opencv

另请参阅:Static library

ENABLE_PIC 设置 CMAKE_POSITION_INDEPENDENT_CODE 选项。它启用或禁用'与位置无关的代码'的生成。在构建要链接到动态库的动态库或静态库时,必须启用此选项。缺省值为 ON。

另请参阅: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 imgproc highgui flann imgcodecs ts videoio

下载的依赖项

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

export OPENCV_DOWNLOAD_PATH=/tmp/opencv-cache
cmake ../opencv

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

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

export http_proxy=http://proxy:port
export https_proxy=https://proxy:port

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

CPU 优化级别

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

cmake -DCPU_BASELINE=AVX2 ../opencv

注意: 其他平台有自己的指令集级别:在 ARM 上为 NEON,在 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:CPU-optimizations-build-options

轮廓分析、覆盖、消毒、硬化、尺寸优化

以下选项可用于生成具有检测或改进安全性的特殊版本。默认情况下,所有选项都处于禁用状态。

选项编译器描述
ENABLE_PROFILINGGCC 或 Clang启用分析编译器和链接器选项。
ENABLE_COVERAGEGCC 或 Clang启用代码覆盖率支持。
OPENCV_ENABLE_MEMORY_SANITIZER不适用在代码中启用多个怪癖以帮助内存清理器。
ENABLE_BUILD_HARDENINGGCC、Clang、MSVC启用编译器选项,以减少代码利用的可能性。
ENABLE_LTOGCC、Clang、MSVC启用链路时间优化(LTO)。
ENABLE_THIN_LTOClang启用精简 LTO,将中间位码合并到二进制文件中,使消费者能够在以后优化其应用程序。

启用 IPP 优化

以下选项可用于为每个函数启用 IPP 优化,但会增加 opencv 库的大小。默认情况下,所有选项都处于禁用状态。

选项功能+ 粗略尺寸
OPENCV_IPP_GAUSSIAN_BLURGaussian Blur+8 MB
OPENCV_IPP_MEANMean / Sum+0.2 MB
OPENCV_IPP_MINMAXMinMax+0.2 MB
OPENCV_IPP_SUMSum+0.1 MB

其他常用构建选项

除了上述选项外,还有一些常用的第三方库集成选项:

  • WITH_TBB: 启用 Intel TBB 并行后端。
  • WITH_OPENMP: 启用 OpenMP 并行后端。
  • WITH_VTK: 启用 VTK 可视化支持。
  • WITH_CUDA: 启用 NVIDIA CUDA 加速(需指定 CUDA_ARCH_BIN)。
  • WITH_FFMPEG: 启用 FFMPEG 视频编解码支持。
  • WITH_GSTREAMER: 启用 GStreamer 多媒体框架支持。

配置时通常结合使用,例如构建带有 CUDA 支持的 OpenCV:

cmake -DWITH_CUDA=ON \
      -DOPENCV_DNN_CUDA=ON \
      -DCUDA_ARCH_BIN=7.5 \
      ../opencv

总结

正确配置 OpenCV 的 CMake 选项对于获得最佳性能和兼容性至关重要。建议在生产环境中关闭测试和示例,开启硬化的安全选项,并根据目标硬件调整 CPU 基线和分发指令集。对于跨平台部署,建议使用静态库或确保动态依赖项的正确传递。

目录

  1. OpenCV CMake 构建配置选项详细参考
  2. 介绍
  3. 初始配置
  4. 打印所有选项
  5. 打印所有选项,并附上帮助消息
  6. 打印所有选项,包括高级选项
  7. 常规选项
  8. 使用额外的模块进行构建
  9. 使用 opencv_contrib 中的所有模块进行构建
  10. 使用 opencv_contrib 模块之一进行构建
  11. 使用两个自定义模块构建(在 bash 中必须转义分号)
  12. 调试生成
  13. 静态构建
  14. 生成 pkg-config 信息
  15. 构建测试、示例和应用程序
  16. 构建有限的模块集
  17. 下载的依赖项
  18. 或
  19. CPU 优化级别
  20. 禁用通用内部函数
  21. 禁用所有可能的内置优化
  22. 轮廓分析、覆盖、消毒、硬化、尺寸优化
  23. 启用 IPP 优化
  24. 其他常用构建选项
  25. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 双指针专题:复写零问题解题思路
  • 大模型的 6 项核心技术:Transformer、预训练与 RLHF 等
  • AI 生成 UI 效果不佳?三步提升前端设计质感
  • RabbitMQ 分布式系统实战:从安装部署到 C++ 客户端调用详解
  • AI 产品经理面试通关:100 道高频问题深度解析与核心知识点梳理
  • RAG 技术如何精准应对大模型敏感问题的知识幻觉难题
  • 使用 John the Ripper 和 Hashcat 破解 RAR、ZIP 与 7z 文件密码(Windows 教程)
  • Stable Diffusion 3.5 硬件准备与环境配置:低配显卡运行指南
  • 集成 Linly-Talker 实现智能客服数字人
  • Python 核心面试题解析:模块、装饰器与异步编程
  • 使用 Git 将代码从远程仓库拉取到本地
  • SmartGit 25.1 版本更新:AI 提交信息与 Git 功能增强
  • ELK 7.7.1 多条件查询实战:Java API 构建 BoolQuery
  • 解决 Nano Banana 生成中文模糊问题:结合 Seedream 4.5 重渲染方案
  • Pi0 机器人大模型在昇腾 A2 上的部署与性能测评
  • Python 调用高德地图 MCP 服务查询天气示例
  • FFT NPainting LaMa 与 Stable Diffusion Inpainting 性能对比评测
  • VSCode 远程连接时 GitHub Copilot Chat 图标缺失修复
  • Python 到 AI 的完整成长路径:新手入门与实战指南
  • 经典优化算法解析:分支限界法与动态规划

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online