0.2opencv库源码编译

news2024/11/17 17:54:53

如何编译opencv库源码

大家好,我是周旋,感谢大家学习【opencv源码解析】系列,本系列首发于公众号【周旋机器视觉】。
上篇文章我们介绍了如何配置opencv环境,搞清了opencv的包含目录include、静态库链接以及动态库链接的作用。
【opencv源码解析0.1】VS如何优雅的配置opencv环境

但环境配置只能让我们使用opencv库,如果要阅读opencv源码,我们就需要编译opencv的源码来生成VS工程,这样才可以完成各个模块、各个文件之间的跳转与阅读。

本教程的环境为

  • Visual Studio 2019
  • CMake 3.22.3
  • opencv 4.6.0
  • windows 10

首先进入我们上篇文章中安装的opencv文件夹:

在这里插入图片描述

sources就是opencv的源码,是使用cmake进行工程管理的,因此我们使用cmake来重新编译该源码。

安装cmake不再赘述,大家自行百度。

打开cmake-gui:

在这里插入图片描述

  1. 此处为我们待编译的源码路径,即source文件夹
  2. 构建、编译该源码的build目录路径,我们可以在source文件夹同级路径下建一个source_build文件夹(其实一般都是建build文件夹,但我们source目录已经有一个官方提供build文件夹了)
  3. cmake的构建选项,这些选项都是由cmake代码中所写的配置选项变量,后面会介绍
  4. configure配置项目:该操作主要是针对cmake,就是使3中的构建选项生效
  5. 编译项目:根据3的构建选项,来执行cmake编译source路径源码,并将编译生成的工程存放到source_build路径

1)配置路径

在这里插入图片描述

按照上文配置两个路径,然后点击configure来配置项目:

在这里插入图片描述

第一次configure会产生一个弹窗,我们选择生成基于x64平台的VS2019工程,点击Finish。经过大概40s的配置过程之后,cmake-gui工具会罗列出opencv库的cmake文件中存在的、提供给用户可配置的一些选项(其实选项很多):

在这里插入图片描述

可以看到出现了很多红色的选项,看到红色不要慌,红色不代表配置出错,红色仅代表这些选项是第一次出现在cmake-gui这个界面,用来提示用户注意的,输出文本框底部的Configuring done可以标明我们的配置过程已经完成。

2)opencv的配置选项option

下面我们插讲一下上面我们配置完成后出现的这些配置选项option,在官方的文档中给出了详细的介绍:

https://docs.opencv.org/4.6.0/db/d05/tutorial_config_reference.html

所有选项的功能都可以通过名字在官方文档中找到对应的介绍。

在这儿我们仅介绍几个常用的构建选项:

  • BUILD_EXAMPLES:显而易见,是否构建opencv的examples例程
  • BUILD_opencv_world:opencv有很多组件,例如core、dnn、imgproc等等,默认情况下该选项为false,此时,我们编译opencv源码生成动态库,会生成各个组件单个的动态库,我们勾选该选项后,则会仅生成opencv_world460.dll这一个动态库
  • CMAKE_BUILD_TYPE:构建的默认类型,可以选择Release或Debug类型

3)编译生成工程

了解了options后,我们继续构建我们的opencv源码,首先我们勾选BUILD_opencv_world这个选项,然后点击configure按钮:

我们说过该按钮是让我们的选项生效,因为我们修改了选项内容,因此需要重新configure一次。

然后点击Generate来编译链接我们的源码,生成VS2019的.sln工程文件:

在这里插入图片描述

可以看到Generating done字样,表示我们编译成功了,上方的options也恢复了正常颜色。

进入我们的source_build目录:

在这里插入图片描述

可以找到我们的OpenCV.sln工程,直接双击打开,就是我们的opencv源码工程了:

在这里插入图片描述

直接编译生成,就可以得到opencv_world460.dll了:

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车安全硬件扩展 AUTOSAR SHE SecureHardwareExtensions

SHE(Secure Hardware Extension)在车联网中,被应用在车端ECU中负责安全存储与安全计算。是由HIS(由Audi、BMW、Porsche、Volkswagen组成)制定的标准,中文意思“安全硬件扩展”,是对任何给定微控…

【Python】Python读写Excel表格

简要版,更多功能参考资料1。1 Excel文件保存格式基础概念此处不提,详见资料1。Excel的文件保存格式有两种: xls 和 xlsx。如果你看不到文件后缀,按下图设置可见。xls是Office 2003及之前版本的表格的默认保存格式。xlsx 是 Excel …

Javac命令详解

命令行 用法: javac <options> <source files> 其中, 可能的选项包括:-g 生成所有调试信息-g:none 不生成任何调试信息-g:{lines,vars,source} 只生成某些调试信息-nowarn 不生成任何警告-ver…

学习 Python 之 Pygame 开发坦克大战(一)

学习 Python 之 Pygame 开发坦克大战&#xff08;一&#xff09;Pygame什么是Pygame?初识pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音…

MyBatis 之三(查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection)

文章目录1. 参数占位符 #{} 和 ${} 的区别2. ${} 的优点3. SQL 注入问题4. like 查询5. 返回字典映射&#xff1a;resultMap6. 一对一查询&#xff1a;association7. 一对多查询&#xff1a;collection回顾一下&#xff0c;在上一篇 MyBatis 之二&#xff08;增、删、改操作&am…

APP测试中IOS和Android的区别,有哪些注意点?

01、常识性区别 02、导航方式 iOS&#xff1a;Tab放在页面底部&#xff0c;不能通过滑动来切换&#xff0c;只能点击。也有放在上面的&#xff0c;也不能滑动&#xff0c;但有些Tab本身可以滑动&#xff0c;比如天猫的。还有新闻类的应用。 Android&#xff1a;一般放在页面…

Visual Studio 高级调试-(上)

概述编程圈子里隔三差五的就会有场“谁是最强IDE”之争&#xff0c;重要的是我们需要对使用的IDE有充分的了解&#xff0c;正所谓工欲善其事&#xff0c;必先利其器。本文主要讲述Visual Studio常用的调试技巧&#xff0c;包括多类型断点&#xff0c;数据监视&#xff0c;以及多…

MySQL ---基础概念

目录 餐前小饮&#xff1a;什么是服务器&#xff1f;什么是数据库服务器&#xff1f; 一、数据库服务软件 1. 常见数据库产品 2.如何开启和停止MySQL服务 二、数据库术语及语法 1.数据库术语 2.SQL语法结构 3.SQL 语法要点 三、SQL分类 1.数据定义语言&#xff08;D…

LeetCode——1237. 找出给定方程的正整数解

一、题目 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/description/ 翻译一下题目 意思是&#xff0c;这是一个二维单调递增的函数&#xff0c;函数一共有 9 …

快速上手GoWeb开发之Gin框架

Go是一门正在快速增长的编程语言&#xff0c;专为构建简单、快速且可靠的软件而设计。 golang提供的net/htp库已经很好了&#xff0c;对于htp的协议的实现非常好&#xff0c;基于此再造框架&#xff0c;也不会是难事&#xff0c;因此生态中出现了很多框架。 Gin: Go 语言编写的…

智能洗地机什么牌子好?智能洗地机排行

要说家庭清洁热门的产品&#xff0c;洗地机肯定首当其冲&#xff0c;集洗吸拖为一体的清洁工具&#xff0c;省时又省力&#xff0c;可谓是家里清洁好助手&#xff0c;今天笔者就为大家介绍几款重量轻、噪音轻、拖地干净的洗地机! 一、CEYEE希亦T800洗地机 在国内&#xff0c;洗…

13.进程---

一、进程的概念 1.可以用ps或top查看进程 2.pid0;交换进程&#xff08;作用是进程调度&#xff09; pid1;init进程&#xff08;作用是系统初始化&#xff09; 3.getpid();//获取自身的进程标识符 4.getppid();//获取父进程的进程标识符 什么是父进程&#xff1f; 答&#x…

【GStreamer 】 TX1中CPU和GPU解码显示海康相机RTSP流

大家好&#xff0c;我是虎哥&#xff0c;今天找了一套海康的相机&#xff0c;想后续测试一下DeepStream用网络相机RTSP流做输入看看后续目标识别和分类。但是还是想先实时看看视频&#xff0c;当然&#xff0c;可以选择VLC去查看&#xff0c;顺道我也用GStreamer 来测试了一下&…

HashMap原理详解

一、hashmap简介 hashmap是Java当中一种数据结构&#xff0c;是一个用于存储Key-Value键值对的集合&#xff0c;每一个键值对也叫作Entry。 二、JDK7的HashMap1、JDK7时HashMap的数据结构 1、在JDK7之前&#xff0c;hashmap底层采用数组链表的数据结构来存储数据 2、插入数据采…

SpringBoot静态资源访问

静态资源路径 类路径下&#xff1a;/resources/static/、/resources/public/、/resources/resources/、/resources/META-INF/resources 这些路径下的资源均可直接访问&#xff1b;通过 http://ip:port/资源名称 访问即可 可在配置文件中对访问路径和访问拦截规则进行设置&…

【ArcGIS Pro二次开发】(5):UI管理_自定义控件的位置

新增的自定义控件一般放在默认的【加载项】选项卡下&#xff0c;但是根据需求&#xff0c;我们可能需要将控件放在新的自定义选项卡下&#xff0c;在自定义选项卡添加系统自带的控件&#xff0c;将自定义的按钮等控件放在右键菜单栏里以方便使用&#xff0c;等等。 下面就以一…

Maven:工程的拆分与聚合

Maven 拆分与聚合创建父工程创建子模块pom.xml配置示例拆分与聚合 在 Maven 中, 拆分是将一个完整的项目分成一个个独立的小模块,聚合是将各个模块进一步组合,形成一个完整的项目。接下来简单示例拆分与聚合的过程。 创建父工程 父工程,一个pom工程,目录结构简单,只需有…

cocos2dx 4.0 - cpp - pc版 环境搭建

开发环境vs2022 cocos2dx4.0 python2.7.18 cmake3.25安装教程&#xff08;环境搭建&#xff09;安装VS2022-Community&#xff0c; 勾选c进行安装安装cmake3.25, 勾选环境变量进行安装安装python2.7.18, 勾选环境变量进行安装下载cocos2dx4.0并解压配置cocos2dx:运行cmd,进入…

DCL 数据控制语言

1、简介 DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 2、管理用户 2.1 查询用户 select * from mysql.user;查询的结果如下: 其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问…

Nuxtjs

SSR渲染 SSR&#xff1a;在服务器端将Vue渲染成HTML返回给浏览器 优点 对SEO支持好SPA单页渲染更快 npx create-nuxt-app nuxtDemo 修改开发地址 package.json文件中进行修改 "config":{"nuxt":{"host":"127.0.0.1","port…