在Windows上通过cmake-gui及VS2019来 编译OpenCV-4.5.3源码

news2025/1/9 14:54:38

文章目录

  • 下载OpenCV-4.5.3源码
  • 下载opencv_contrib-4.5.3源码
  • 打开cmake-gui
    • 选择生成器
  • 通过 Visual Studio 2019 打开构建好的.sln工程文件
    • 执行编译操作
    • 执行安装操作

下载OpenCV-4.5.3源码

可通过github上下载,网上很多,找到tag标签,选择 OpenCV-4.5.3 进去后,找到 sourceCode.zip。然后点击下载。
如下:
下载地址
进来之后,点击 下图中的 tags 标签
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也可以找台网络好的Linux云机器上直接输入 wget https://github.com/opencv/opencv/archive/refs/tags/4.5.3.zip 进行下载

下载opencv_contrib-4.5.3源码

下载地址

也是仿照上面的方式进行下载,由于opencv_contrib-4.5.3是opencv的一个模块,因此编译OpenCV时需要这个。

源码准备好的截图如下:
在这里插入图片描述
由于github时常打不开,导致下载不了上方的源码。这里提供了网盘下载的方式:
链接:https://pan.baidu.com/s/1nTKa72azGfCXJynqwhEeFw
提取码:14bz
下载完毕后解压下就行了。

打开cmake-gui

在这里插入图片描述
之前已经安装过了。没有安装过,可以看下这篇:cmake安装
在这里插入图片描述
在这里插入图片描述

选择生成器

在这里插入图片描述
ps:上图说的vcproj纠正为是vcxproj。

配置好后,点击上图的Finish。
然后就自动开始解析CmakeList.txt文件中的配置,包括自动从当前电脑系统环境下查找CmakeList.txt文件中各种变量的符合要求的值,已经解析CmakeList.txt中的各个源文件是否存在。(自动识别),已经从第三方那里下载所需要的库。配置解析完毕后,会在中间 Name- Value 那片显示区域,会把解析后CmakeList.txt文件中各种变量的名称,已经从当前系统环境变量中查找的值及当前变量的状态都显示出来。
现在的开源项目基本上都是用cmake来进行管理。cmake就是一个项目管理工具。根据CmakeList.txt中的编写的规则来组织项目的构建步骤。一个大的开源项目下,会有多个模块,每个模块下又有各自的CmakeList.txt文件。但是开源项目的根目录只有一个CmakeList.txt。
根目录下的CmakeList.txt文件内会引入各个模块下的CmakeList.txt文件。这就有点类似于java中的 maven的作用。

在这里插入图片描述

这里我们把上图里底部打印出的内容粘出来看看。

Selecting Windows SDK version 10.0.22000.0 to target Windows #选择本机上适合的Windows SDK
10.0.22621. Detected processor: AMD64 #检测到本地的处理器架构

Found PythonInterp: D:/software/python/python.exe (found suitable version “3.8.6”, minimum required is “2.7”) #检测到本机安装的python是3.8.6.而最小要求是2.7满足要求。如果需要将OpenCV用于python。这里需要把python加入系统环境变量Path中这里才能检测到。


下面的提示有个zip没有从网络上下载下来。
IPPICV: Download: ippicv_2020_win_intel64_20191018_general.zip
Try 1 failed

=======================================================================
  Couldn't download files from the Internet. #不能够从互联网上下载此文件
  Please check the Internet access on this host.
=======================================================================

CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
  IPPICV: Download failed: 6;"Couldn't resolve host name"

  For details please refer to the download log file:

  D:/vs_project/OpenCV/bulid_x64/CMakeDownloadLog.txt  #查看这个日志文件,手动下载此文件
OpenCV Python: during development append to PYTHONPATH: D:/vs_project/OpenCV/bulid_x64/python_loader
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) 
FFMPEG: Download: opencv_videoio_ffmpeg.dll
Try 1 failed
.......................................
FFMPEG: Download: opencv_videoio_ffmpeg_64.dll
Try 1 failed

D:/vs_project/OpenCV/bulid_x64/CMakeDownloadLog.txt 中的内容:
在这里插入图片描述
根据日志文件可知有三个文件下载失败:

  1. ippicv_2020_win_intel64_20191018_general.zip
  2. opencv_videoio_ffmpeg.dll
  3. opencv_videoio_ffmpeg_64.dll
    根据日志文件里提示ippicv_2020_win_intel64_20191018_general.zip是从https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip路径下载文件到D:/vs_project/OpenCV/opencv-4.5.3/.cache/ippicv/879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip。
    在这里插入图片描述
    下载通过手动方式下载。本人是从华为云上通过wget方式下载的。
wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip

在这里插入图片描述
然后手动添加后uuid前缀,放到Windows的指定目录上。
在这里插入图片描述
另外两个:https://raw.githubusercontent.com/opencv/opencv_3rdparty/213fcd5d4897319a83207406036c4a5957fba010/ffmpeg/opencv_videoio_ffmpeg.dll 到 D:/vs_project/OpenCV/opencv-4.5.3/.cache/ffmpeg/bab661341c30862fa88627130219c0a5-opencv_videoio_ffmpeg.dll

https://raw.githubusercontent.com/opencv/opencv_3rdparty/213fcd5d4897319a83207406036c4a5957fba010/ffmpeg/opencv_videoio_ffmpeg_64.dll 到 D:/vs_project/OpenCV/opencv-4.5.3/.cache/ffmpeg/ac99f9767a83103c31709628af685924-opencv_videoio_ffmpeg_64.dll
也是按照上述方式下载,然后放到指定目录下。
在这里插入图片描述
下载比较慢…。待其下载完毕后放到指定目录下就行。
其实上面的这几个文件不下载,也不影响后续的操作。只是将来的exe,dll或者lib文件不包含这些功能罢了。
在这里插入图片描述
在这里插入图片描述
接下来说说红框里的设置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来,进入到D:\vs_project\OpenCV\bulid_x64目录下,就可以看到通过cmake构建好的项目工程。里面可以看到.sln(解决方案文件)和大量的.vcxproj(工程文件),以及各个模块下也有.vcxproj文件。
在这里插入图片描述

通过 Visual Studio 2019 打开构建好的.sln工程文件

这样通过cmake就把Visual Studio 2019 上的解决方案工程构建好了。
双击OpenCV.sln 会自动用Visual Studio 2019 打开。
在这里插入图片描述

执行编译操作

执行ALL_BUILD命令(底层会调用VS MSBuild命令,对.vcxproj文件内容进行读取通过gl.exe执行编译及链接的整个过程)(release /x64)
在这里插入图片描述
注意:虽然通过cmake新构建好的项目在D:\vs_project\OpenCV\bulid_x64目录下,但是OpenCV的源码并没有在bulid_x64目录下。所以是执行ALL_BUILD(对源码的实际编译时),原来的源码位置:D:\vs_project\OpenCV\opencv-4.5.3及其下的CMakeLists.txt文件还是需要被引用使用的。否则在ALL_BUILD会报错。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到有的工程最后编译完后生成了lib库,有的生成了dll库,有的生成了exe文件。
它们都被放到了:D:\vs_project\OpenCV\bulid_x64\bin\Release目录下了。

执行安装操作

接下来执行 INSTALL:
在这里插入图片描述
执行完毕后:会在D:\vs_project\OpenCV\bulid_x64目录下创建一个install目录在这里插入图片描述
有时候,生成的dll和lib文件有多个,有时候只有几个。和有没有勾选BUILD_opencv_world有关:没有勾选这一项的话,会生成很多dll及lib文件。勾选的话,可能只生成一两个库文件。其中包括opencv_world453.dll。这个dll库包括了其他的dll库。
在这里插入图片描述
至此构建及编译结束!
个人总结:开源项目发布时是通过CMake来管理项目结构的。但是通过cmake项目使用指定生成器 构建出的.sln工程和实际使用VS创建的.sln工程还不一样。我们进行二次开发的话,还是要在CMake来管理项目下开发。而这种构建出的.sln工程只是适用于来生成编译后的结果及发布结果。

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

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

相关文章

TCP/IP详解——HTTP 协议

文章目录 1. HTTP 协议1.1 URL 的格式1.2 请求报文分析1.2.1 请求行1.2.2 请求头 1.3 响应报文分析1.3.1 状态行1.3.2 响应报头 1.4 HTTP 工作原理1.5 Request 消息1.6 Request 包解码1.7 Response 消息1.8 HTTP 协议抓包分析1.8.1 CSNAS 抓包查看1.8.2 Wireshark 抓包查看1.8.…

关于枚举的简单理解

1. 枚举的简单认识 1.1 枚举的引入 枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式如下面的代码所示: public static final int RED 1; public static final int GREEN 2; public…

git代码管理学习文档

1.版本控制 每一版本都会发生变化 更新版本,回退版本 版本控制实际就是控制文件的变化 服务器端和每个人的电脑上都会记录版本的变化,也就是说整个团队都记录了版本的变化。 不需要连网,他是分布式的,在自己电脑上也可以操作。 …

Easy Excel生成复杂下Excel模板(下拉框)给用户下载

引言 文件的下载是一个非常常见的功能,也有一些非常好的框架可以使用,这里我们就介绍一种比较常见的场景,下载Excel模版,导入功能通常会配有一个模版下载的功能,根据下载的模版,填充数据然后再上传。 需求…

【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来

【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来 一、模型介绍 1、模型简介 季节性差分自回归移动平均模型(Seasonal Autoregressive Integrated Moving Average Model, SARIMA),又称为周期性…

指针进阶篇

指针的基本概念: 指针是一个变量,对应内存中唯一的一个地址指针在32位平台下的大小是4字节,在64位平台下是8字节指针是有类型的,指针类型决定该指针的步长,即走一步是多长指针运算:指针-指针表示的是两个指…

SQL注入学习(配合SQLi-lab靶场)

前提条件: 在进行sql注入时,首先要确定网页有注入点,一般在URL地址栏中,或者含有输入框的地方会有 SQL注入步骤: 1、判断注入类型 首先判断是什么类型的注入,用id1 and 11 和id1 and 12 判断是数字类型注…

Redis设计与实现之整数集合

目录 一、内存映射数据结构 二、整数集合 1、整数集合的应用 2、数据结构和主要操作 3、intset运行实例 创建新intset 添加新元素到 intset 添加新元素到 intset(不需要升级) 添加新元素到 intset (需要升级) 4、升级 升级实例 5、关于升级 …

25.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现

1. 引言 1.1 背景 介绍校园求职系统的背景,说明为什么设计这个系统以及系统的重要性。 1.2 研究目的 阐述设计基于SSM框架的微信小程序校园求职系统的目标和意义。 2. 需求分析 2.1 行业背景 分析校园求职行业的特点和需求,以及目前市场上同类系统…

Spring Boot SOAP Web 服务端和客户端

一. 服务端 1. 技术栈 JDK 1.8,Eclipse,Maven – 开发环境SpringBoot – 基础应用程序框架wsdl4j – 为我们的服务发布 WSDLSOAP-UI – 用于测试我们的服务JAXB maven 插件 – 用于代码生成 2.创建 Spring Boot 项目 添加 Wsdl4j 依赖关系 编辑pom…

化学方程式小程序

brief introduction 相信大家上中学时都会被化学方程式折腾得死去活来,尤其是配平,怎么也算不对数字。于是我写出了这款近200行的自动配平程序,这是不是你们黑暗化学中的一丝光亮呢? usage 正常化学式输入,每一种物…

智慧农业大数据可视化UI,数据展示平台(免费可视化大屏模版PS资料)

大屏幕展示方式可以实现信息的直观呈现与交互操作,使农业生产者能够一目了然地掌握有关农情、天气、土壤等数据信息,从而科学决策。智慧农业大数据可视化大屏是提升农业生产效益的一种重要工具。 现分享亩产效益指标、农业大数据可视化、农业数据展示平…

基于EasyExcel的数据导入导出

前言: 代码复制粘贴即可用,主要包含的功能有Excel模板下载、基于Excel数据导入、Excel数据导出。 根据实际情况修改一些细节即可,最后有结果展示,可以先看下结果,是否是您想要的。 台上一分钟,台下60秒&a…

QT Widget - 随便画个圆

简介 实现在界面中画一个圆, 其实目的是想画一个LED效果的圆。代码 #include <QApplication> #include <QWidget> #include <QPainter> #include <QColor> #include <QPen>class LEDWidget : public QWidget { public:LEDWidget(QWidget *pare…

前端传递参数,后端如何接收

目录 简单参数 传递方式 获取方式一 获取方式二 相关注解 实体参数 数组集合参数 传递方式 相关注解 获取方式一 获取方式二 日期参数 传递方式 相关注解 获取方式 json参数 传递方式 相关注解 获取方式 路径参数 传递方式 相关注解 获取方式 传递多个…

【Java系列】详解多线程(三)—— 线程安全(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一…

心理测试网站源码,知己心理React心理健康测试

源码介绍 React心理健康测试网站源码&#xff0c;帮助需要的人更好地了解自已的心理健康状态和人格特征。 React可以在Vite中启用HMR&#xff0c;并且包含了几人EsLint规则。只需要使用react antd-mobile即可 轻松部署完成。

【JAVA日志框架】JUL,JDK原生日志框架详解。

前言 Java日志体系混乱&#xff1f;Java日志框架系列&#xff0c;清晰简洁整理好整个Java的日志框架体系。第一篇&#xff0c;JDK原生日志框架——JUL。 目录 1.概述 2.日志级别 3.配置 4.继承关系 1.概述 日志框架的核心问题&#xff1a; 日志是用来记录应用的一些运行…

C++ Qt开发:Tab与Tree组件实现分页菜单

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍tabWidget选择夹组件与TreeWidget树形选择组件…

Swift 响应式编程:简化 KVO 观察与 UI 事件处理 | 开源日报 No.110

ReactiveX/RxSwift Stars: 23.8k License: MIT RxSwift 是 Reactive Extensions 标准的 Swift 特定实现&#xff0c;它提供了 Observable 接口来表达计算的通用抽象。该项目旨在为 Rx API 提供真正以 Swift 为先的 API&#xff0c;并允许轻松地组合异步操作和数据流。其主要功…