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_PATHoption 包含一个以分号分隔的目录列表,其中包含将添加到构建中的额外模块。模块目录必须具有兼容的布局和CMakeLists.txt,简要说明可以在编码风格指南中找到。

例子:

# 使用 opencv_contrib 中的所有模块进行构建

cmake -DOPENCV_EXTRA_MODULES_PATH=…/opencv_contrib/模块 …/opencv

# 使用 opencv_contrib 模块之一进行构建

cmake -DOPENCV_EXTRA_MODULES_PATH=…/opencv_contrib/模块/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=调试 …/opencv

cmake --构建。

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

cmake <选项> …/opencv

cmake --构建。–config 调试

如果您使用 GNU libstdc++(GCC 的默认值),您可以打开该选项,然后 C++ 库将在调试模式下使用,例如在向量元素访问期间将绑定检查索引。ENABLE_GNU_STL_DEBUG

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

  • 一些第三方库(例如 IPP、Lapack、Eigen)

  • 显式矢量化实现(通用内部函数、原始内部函数等)

  • 调度优化

  • 显式循环展开

  • 另请参阅

    https://cmake.org/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=关闭 …/opencv

  • 另请参阅

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

ENABLE_PIC`设置 [CMAKE_POSITION_INDEPENDENT_CODE](https://cmake.org/cmake/help/latest/variable/CMAKE_POSITION_INDEPENDENT_CODE.html) 选项。它启用或禁用“与位置无关的代码”的生成。在构建要链接到动态库的动态库或静态库时,必须启用此选项。缺省值为 。`ON
  • 另请参阅

    https://en.wikipedia.org/wiki/Position-independent_code

生成 pkg-config 信息

OPENCV_GENERATE_PKGCONFIG`选项允许文件生成与标准 CMake 包一起生成。此文件对于不使用 CMake 进行生成的项目非常有用。`.pc

例:

cmake -DOPENCV_GENERATE_PKGCONFIG=ON …/opencv

  • 注意

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

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

有两种测试:准确性()和性能()。默认情况下,测试和应用程序处于启用状态。默认情况下不会生成示例,应显式启用示例。opencv_test_*``opencv_perf_*

对应的 cmake 选项:

cmake \

-DBUILD_TESTS=开 \

-DBUILD_PERF_TESTS=开 \

-DBUILD_EXAMPLES=开 \

-DBUILD_opencv_apps=开 \

…/opencv

构建有限的模块集

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

cmake -DBUILD_opencv_calib3d=关闭 …/opencv

相反的选项是仅构建指定的模块及其所依赖的所有模块:

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

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

– OpenCV模块:

– 待构建:calib3d 核心功能2d flann highgui imgcodecs imgproc ts videoio

下载的依赖项

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

导出 OPENCV_DOWNLOAD_PATH=/tmp/opencv-cache

cmake …/opencv

# 或

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

  • 注意

    其他平台有自己的指令集级别:在 ARM 上,在 PowerPC 上。VFPV3``NEON``VSX

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

cmake -DCPU_DISPATCH=AVX,AVX2 …/opencv

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

cmake -DCPU_DISPATCH= …/opencv

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

# 禁用通用内部函数

cmake -DCV_ENABLE_INTRINSICS=关闭 …/opencv

# 禁用所有可能的内置优化

cmake -DCV_DISABLE_OPTIMIZATION=ON …/opencv

  • 注意

    有关 CPU 优化选项的更多详细信息,请参见 wiki:https://github.com/opencv/opencv/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_LTO启用精简 LTO,将中间位码合并到二进制文件中,使消费者能够在以后优化其应用程序。
  • 另请参阅

    GCC 仪器

    构建强化

    程序间优化

    链路时间优化

    ThinLTO (简体式)

启用 IPP 优化

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

选择功能+ 粗略尺寸
OPENCV_IPP_GAUSSIAN_BLURGaussianBlur()+8兆字节
OPENCV_IPP_MEANmean() / meanStdDev()+0.2兆字节
OPENCV_IPP_MINMAXminMaxLoc() / minMaxIdx()+0.2兆字节
OPENCV_IPP_SUMsum()+0.1兆字节

在线教程

  • 麻省理工学院人工智能视频教程 – 麻省理工人工智能课程
  • 人工智能入门 – 人工智能基础学习。Peter Norvig举办的课程
  • EdX 人工智能 – 此课程讲授人工智能计算机系统设计的基本概念和技术。
  • 人工智能中的计划 – 计划是人工智能系统的基础部分之一。在这个课程中,你将会学习到让机器人执行一系列动作所需要的基本算法。
  • 机器人人工智能 – 这个课程将会教授你实现人工智能的基本方法,包括:概率推算,计划和搜索,本地化,跟踪和控制,全部都是围绕有关机器人设计。
  • 机器学习 – 有指导和无指导情况下的基本机器学习算法
  • 机器学习中的神经网络 – 智能神经网络上的算法和实践经验
  • 斯坦福统计学习
    有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

请添加图片描述

人工智能书籍

  • OpenCV(中文版).(布拉德斯基等)
  • OpenCV+3计算机视觉++Python语言实现+第二版
  • OpenCV3编程入门 毛星云编著
  • 数字图像处理_第三版
  • 人工智能:一种现代的方法
  • 深度学习面试宝典
  • 深度学习之PyTorch物体检测实战
  • 吴恩达DeepLearning.ai中文版笔记
  • 计算机视觉中的多视图几何
  • PyTorch-官方推荐教程-英文版
  • 《神经网络与深度学习》(邱锡鹏-20191121)

  • 在这里插入图片描述

第一阶段:零基础入门(3-6个月)

新手应首先通过少而精的学习,看到全景图,建立大局观。 通过完成小实验,建立信心,才能避免“从入门到放弃”的尴尬。因此,第一阶段只推荐4本最必要的书(而且这些书到了第二、三阶段也能继续用),入门以后,在后续学习中再“哪里不会补哪里”即可。

第二阶段:基础进阶(3-6个月)

熟读《机器学习算法的数学解析与Python实现》并动手实践后,你已经对机器学习有了基本的了解,不再是小白了。这时可以开始触类旁通,学习热门技术,加强实践水平。在深入学习的同时,也可以探索自己感兴趣的方向,为求职面试打好基础。

第三阶段:工作应用

这一阶段你已经不再需要引导,只需要一些推荐书目。如果你从入门时就确认了未来的工作方向,可以在第二阶段就提前阅读相关入门书籍(对应“商业落地五大方向”中的前两本),然后再“哪里不会补哪里”。

有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/370473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

InstantID:一张照片,无需训练,秒级个人写真生成

1. 引言 InstantID是一种基于扩散模型的强大解决方案。设计的即插即用模块仅使用单个面部图像就能熟练地处理各种风格的图像个性化&#xff0c;同时确保高保真度。它的核心是设计了一个新颖的 IdentityNet&#xff0c;通过强加语义和弱空间条件&#xff0c;将面部和地标图像与…

jmeter-04创建请求

文章目录 一、发送请求-查看响应流程二、新建请求三、选择请求方式&#xff0c;填写url1.发送get请求当只有请求方式不一样的时候&#xff0c;参数都填写在参数栏里面&#xff0c;GET请求与POST请求的区别&#xff1f; 2.发送post请求2.1 application/x-www-form-urlencoded2.2…

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…

Jenkins(本地Windows上搭建)上传 Pipeline构建前端项目并将生成dist文件夹上传至指定服务器

下载安装jdk https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows 下载jenkins window版 双击安装 https://www.jenkins.io/download/thank-you-downloading-windows-installer-stable/ 网页输入 http://localhost:8088/ 输入密码、设置账号、安装推…

Ainx框架实现 一

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于Ainx系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列…

Mysql+MybatisPlus+Vue实现基础增删改查CRUD

数据库 设计数据库 设计几个字段&#xff0c;主键id自动增长且不可为空 create table if not exists user (id bigint(20) primary key auto_increment comment 主键id,username varchar(255) not null comment 用户名,sex char(1) not null comment 性…

C++弹球游戏:Jump Ball Game

一、下载压缩包 请查看网站C弹球游戏&#xff1a;Jump Ball Game并且下载&#xff0c;可以看到如下界面&#xff1a; 二、匹配图标 把压缩包解压了&#xff1a; 右键点击Jump Ball Game.lnk&#xff0c;点击“属性”它将会是我们要运行的文件。 点击“更改图标”&#xff0c;选…

【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

344. Reverse String(反转字符串)

题目描述 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 问题分析 以中间字符为轴&#xff0c;将两边的字符对换…

Python 轻量级定时任务调度:APScheduler

简述 APscheduler (Advanced Python Scheduler)&#xff0c;作用为按指定的时间规则执行指定的作业。提供了基于日期date、固定时间间隔interval 、以及类似于Linux上的定时任务crontab类型的定时任务。该框架不仅可以添加、删除定时任务&#xff0c;还可以将任务存储到数据库…

浅谈Zookeeper及windows下详细安装步骤

1. Zookeeper介绍 1.1 分布式系统面临的问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 面临的问题&#xff1a;系统每个节点之间信息同步及共享 以一个小团队为例,面临的问题 通过网络进行信息…

蓝桥杯---生日蜡烛

某君从某年开始每年都举办一次生日party&#xff0c;并且每次都要吹熄与年龄相同根数的蜡烛&#xff0c;现在算起来&#xff0c;他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的? 请填写他开始过生日 party的年龄数。 注意:你提交的应该是一个整数&#xff0c;不要…

二分查找第二弹

目录 力扣852.山脉数组的峰顶索引 力扣162.寻找峰值 力扣153.寻找旋转排序数组中的最小值 力扣剑指Offer53.0-n-1缺失的数字 力扣852.山脉数组的峰顶索引 峰顶之前的全部比他小&#xff0c;峰顶之后的也比他小&#xff0c;把小于等于和大于分成两段 class Solution {publi…

TQ15EG开发板教程:使用vivado2023.1建立hello world工程

1:打开软件建立工程 2:使用vivado创建设计模块并生成bit文件 3:导出硬件平台&#xff0c;使用vitis建立工程 4:使用vitis创建应用程序项目 5:硬件设置与调试 1:打开软件建立工程 打开VIVADO2023.1 创建一个新的工程 输入项目名称和地址&#xff0c;下面那个选项为是否…

深入了解关联查询和子查询

推荐阅读 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;一&#xff09; 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;二&#xff09; 文章目录 推荐阅读关联查询子查询 关联查询 关联查询 从多张表中查询对应记录的信息&#xff0c;关联查…

网络原理-TCP/IP(5)

TCP协议 延迟应答 它也是基于滑动窗口,提高效率的一种机制,结合滑动窗口以及流量控制,能够以延迟应答ACK的方式,把反馈的窗口,搞大.核心在于允许范围内,让窗口尽可能大. 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小. 1.假设接收端缓冲区为1M.一次收到了5…

Java特别篇--关于线程创建的三种方式的总结对比

文章目录 一、常见3种创建线程的方式&#xff08;1&#xff09;方式1&#xff1a;继承Thread类的方式&#xff08;2&#xff09;方式2&#xff1a;实现Runnable接口的方式&#xff08;3&#xff09;方式3&#xff1a;通过Callable和Future接口创建线程 二、对比三种方式&#x…

CUDA/TensorRT部署知识点

CUDA相关: 1、CUDA核函数嵌套核函数的用法多吗? 答:这种用法非常少,主要是因为启动一个kernel本身就有一定延迟,会造成执行的不连续性。 2、如下代码里的 grid/block 对应硬件上的 SM 的关系是什么? 答:首先需要理解grid/block是软件层的概念,而SM是硬件层的概念。所…

python脚本将照片按时间线整理

说明&#xff1a;有一次自己瞎折腾&#xff0c;然后把服务器相册搞崩了&#xff0c;后来做了备份同步给找了回来&#xff0c;但是相册的时间线全乱了&#xff0c;看起来非常难受。所以就想通过文件夹的形式把照片重新分类&#xff0c;分类后的结构如下(红色字体为文件夹)&#…

人生百相,不过熵增熵减

这篇博文由两个问题衍生而来&#xff0c;分别是&#xff1a;“为什么除法比加法困难”、“什么是生命进化的目的”。在阅读其他人的解读时&#xff0c;发现都关联到了一个概念&#xff0c;熵。觉得十分有意思&#xff0c;因此记录一下自己的遐想。 熵&#xff08;Entropy&#…