Windows 下使用 CMake + Visual Studio 2022 编译 OpenCV 4.8.1 及其扩展模块

news2025/1/16 6:40:59

一. 背景

目前维护的某个项目是在 Windows 下运行的,并且使用了 OpenCV 4.5.2 版本。

我本地的开发环境是 Mac 并使用了比较新的 OpenCV 4.8.1 版本。为了和本地开发环境保持一致,我打算对项目中使用的 OpenCV 进行升级,因为该项目还是用了扩展模块的一些功能,所以需要自行编译。

本文只是记录自己在编译时踩过的坑,避免下次再犯或者给有需要的人。

二. 需要准备的软件

CMake 3.13 或者以上版本 https://cmake.org/2897073b8c2c9d7a343b29dabcc967e7.jpeg

Visual Studio 2022 社区版本 https://visualstudio.microsoft.com/zh-hans/vs/

OpenCV 4.8.1 源码包 https://github.com/opencv/opencv/releases/tag/4.8.174e629d54b32e97ba7aa6041f27bfb50.jpeg

OpenCV 4.8.1 扩展模块源码包 https://github.com/opencv/opencv_contrib/releases/tag/4.8.13247aec510860248d7655a83a478dfb4.jpeg

三. 编译

3.1 使用 CMake

3.1.1 准备工作

解压 OpenCV4.8.1 源码包和扩展模块源码包到某个位置1879ef9126f65dda402d5482ab16fe78.jpeg

打开 cmake-gui,设置 OpenCV4.8.1 源码的位置和输出编译的二进制文件的位置fd7e2d77a27e34597ffef83cf6aa108c.jpeg

3.1.2 Configure

点击"Configure",弹窗会显示build目录没有创建,是否需要创建。3eaaa51cba37ae6f1e9a18700624aa95.jpeg

点击“Yes"之后,CMake 会让你选择使用什么工具来生成这个项目。我们采用 Visual Studio 2022。4bb88724e1d4237cf20bfbcdfa699dea.jpeg

"Configure"配置成功后,会出现这个界面fd85536f62cd64766d3e06308f9235bf.jpeg

此时,我们可以设置扩展模块的路径bc80bca10e1589a74e9e4c12fd2dc124.jpeg

扩展模块的路径在设置时,一定要到 modules 这个文件夹,否则后面再次"Configure"会失败。

如果需要编译 OpenCV World 模块,也需要在这里单独设置。9f795865b96e4315a7545f8ac1e8cdd8.jpeg

World 模块是一个超级模块(super-module),它结合了用户选择的所有其它模块。它是一个一体化(all-in-one)模块,具有所有库的功能。

然后再次点击"Configure"。50e5e01faa6d0f16d3439a3d8f4107cd.jpeg

此时,最好看一下 CMake 的下载日志,下面的文件是 CMake 的下载日志。

b6d5cd510cade33f71d38eddd5c6f848.jpeg
cmake 的下载日志.jpg

某些文件的无法下载可能会最终导致 OpenCV World 模块无法编译成功。

我主要是修改这几个地方:

a. 进入 C:/opencv-4.8.1/opencv-4.8.1/3rdparty/ippicv 目录 将 ippicv.cmake 的 https://raw.githubusercontent.com 修改为:https://raw.staticdn.net

b. 进入 C:/opencv-4.8.1/opencv-4.8.1/3rdparty/fmpeg 目录 将 ffmpeg.cmake 的 https://raw.githubusercontent.com 修改为:https://raw.staticdn.net

c. 进入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/xfeatures2d/cmake 目录 将 download_boostdesc.cmake 中的https://raw.githubusercontent.com 修改为:https://raw.staticdn.net

d. 进入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/xfeatures2d/cmake 目录 将 download_vgg.cmake 中的 https://raw.githubusercontent.com 修改为:https://raw.staticdn.net

e. 进入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/face 目录 修改 CMakeLists.txt, 将https://raw.githubusercontent.com 修改为:https://raw.staticdn.net

之后再重新"Configure"即可。

3.1.3 Generate

接下来,点击"Generate"生成使用 CMake 构建的项目3c11b6404f88102214ae26744fb77bd4.jpeg

3.1.4 Open Project

最后点击"Open Project",唤起 Visual Studio 2022 打开该项目。

当然也可以去输出编译的二进制文件的目录(C:/opencv-4.8.1/newbuild) ,打开 OpenCV.sln 文件达到同样的效果。

a9be9cacc144b8c9e2766668463375d8.jpeg
点击"Open Project".jpg

3.2 使用 Visual Studio 2022

在编译之前,先配置 opencv_world 模块,然后选择 release 或者 debug。5a7364773d4044ced87f23ee3d8df98d.jpeg

找到 CMakeTargets,选择 ALL_BUILD 进行生成。da87842ea17a6255626b714a2b150671.jpeg

上述步骤生成成功后,选择 INSTALL 进行生成。a0bea1e91ba5605130d741b142e274df.jpeg

INSTALL 生成成功后,这次编译算是大功告成了。我们完成了OpenCV4.8.1 及其扩展模块的编译。210873115689bb84dda9f811115c98de.jpeg

我们可以在输出编译的二进制文件的目录(C:/opencv-4.8.1/newbuild)下找到 install 文件夹e15116fb6075844567ab039430890d09.jpeg

install 文件夹最终输出的内容如下19b6638b5f34ca909b1494e80c5ba7bf.jpeg

我们也成功编译了 opencv_world 模块。7b196b53e2256eb990764a31b1db7e86.jpeg

四. 总结

本文只是便于自己日后翻阅和查找。

不过整个编译过程花费了1天多才搞定。编译的时候遇到各种问题,其实只要仔细阅读日志进行分析,总能解决。

当然,自行编译 OpenCV 库有很多好处,可以根据自己的需要定制 OpenCV 库,可以针对特定的硬件平台优化 OpenCV 库等等。

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

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

相关文章

BI数据分析有什么优势?引入BI工具为何能加快企业数字化进程?

进化是人类社会永恒不变的主题。从早期的猿人到现在的人类,从久远的石器时代到现在的信息时代,人类社会历经一次次的进化才积攒了今日的科技与智慧。人类的文明史,实质是科学和信息的进化史。 如今,数字化浪潮席卷全球&#xff0…

React Hooks(常用)笔记

一、useState(保存组件状态) 1、基本使用 import { useState } from react;function Example() {const [initialState, setInitialState] useState(default); } useState(保存组件状态) :React hooks是function组件(无状态组件) &#xf…

ruby 配置代理 ip(核心逻辑)

在 Ruby 中配置代理 IP,可以通过设置 Net::HTTP 类的 Proxy 属性来实现。以下是一个示例: require net/http// 获取代理Ip:https://www.kuaidaili.com/?refrg3jlsko0ymg proxy_address 代理IP:端口 uri URI(http://www.example.com)Net:…

【EI会议征稿】2024年先进机械电子、电气工程与自动化国际学术会议(ICAMEEA 2024)

2024 International Conference on Advanced Mechatronic, Electrical Engineering and Automation ●会议简介 2024年先进机械电子、电气工程与自动化国际学术会议(ICAMEEA 2024)将汇聚全球机械电子、电气工程与自动化领域的专家学者,共同…

网际互联及OSI七层模型

1什么是OSI七层模型 2OSI每一个Layer的定义 及用途 3如何使用OSI参考模型分析网络通信过程 一、网际互联 (一)OSI的概念: open system interconnect开放系统互联参考模型,是有ISO(国际标准化组织)定义…

科技的崛起:国内机器视觉蓬勃发展

文 | BFT机器人 在工业4.0的浪潮下,随着科技的蓬勃发展,机器视觉逐渐走入大众视野,机器视觉产品的普及范围也越来越广。 大家知道机器视觉的由来吗? 机器视觉的由来可以追溯到20世纪70年代,美国麻省理工学院&#xff…

【Leetcode每日一题】 动态规划 - 地下城游戏(难度⭐⭐⭐)(61)

1. 题目解析 题目链接:174. 地下城游戏 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 一、状态表定义 在解决地下城游戏问题时,我们首先需要对状态进行恰当的定义。一个直观的想法是&#x…

Python 将PowerPoint (PPT/PPTX) 转为HTML格式

PPT是传递信息、进行汇报和推广产品的重要工具。然而,有时我们需要将这些精心设计的PPT演示文稿发布到网络上,以便于更广泛的访问和分享。本文将介绍如何使用Python将PowerPoint文档转换为网页友好的HTML格式。包含两个示例: 目录 Python 将…

如何用idm下载迅雷文件 idm怎么安装到浏览器 idm怎么设置中文

如果不是vip用户使用迅雷下载数据文件,其下载速度是很慢的,有的时候还会被限速,所以很多小伙们就开始使用idm下载迅雷文件,idm这款软件最大的优势就是下载速度快,还有就是具备网页捕获功能,能够下载网页上的…

C++ - STL详解—vector类

一. vector的概念 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 …

探索MATLAB在计算机视觉与深度学习领域的实战应用

随着人工智能技术的快速发展,计算机视觉与深度学习已成为科技领域中最热门、最具挑战性的研究方向之一。 它们的应用范围从简单的图像处理扩展到了自动驾驶、医疗影像分析、智能监控行业等多个领域。 在这样的背景下,《MATLAB计算机视觉与深度学习实战…

【C++题解】1020. 算算和是多少

问题:1020. 算算和是多少 类型:基本运算、拆位求解 题目描述: 输入一个三位正整数,然后与它倒过来的数相加,输出和。 如:输入167 ,则和为167761928。 输入: 只有一行&#xff0c…

Node.JS后端开发笔记整理(简洁版)

前端 1. 开发环境和技术栈 开发工具:Visual Studio CodeNode.js版本:18.19.0(建议保持在18)包管理器:npm前端框架:Vue3.4脚本语言:TypeScript构建工具:Vite后端框架:Ex…

Activity——绘制第一张流程图bpmn

文章目录 前言流程符号事件Event活动 Activity网关 GateWay流向 Flow 使用idea绘制第一张流程图设置流程图各节点属性流程图转换图片 问题原因与问题解决汇总问题一:流程乱码问题二:其他idea主题无左侧 Bpmn Editor 设置框问题三:idea右键xml…

探究欧拉恒等式的美学与数学威力

正如老子所述,“道生一,一生二,二生三,三生万物”,数学作为人类认知自然法则的语言,其数系的不断发展象征着对世界理解的深化。从自然数经由分数、无理数至复数,复数虽看似反直觉,却…

Web安全知识

第二章 虚拟机运行架构: 1.寄居结构 2.原生架构 软件 注:Hyper-V是在Windows 2008操作系统上 附录 连接FTP服务器过程: 1.下载了软件: 2.连接到ftp://10.0.105.223/服务器(访问老师课堂资源地址) 关闭…

恒峰智慧科技—森林防火杆:科技与环保的完美结合

在当今世界,我们不仅要关注人类生活的方方面面,也需要更加重视环境保护。尤其是在森林火灾的防范上,科技的应用显得尤为重要。这就是我们今天要介绍的主角——森林防火杆。 首先,让我们来了解一下森林防火杆的基本配置。这是一种基…

启明云端ESP32-S3+车载桥接器案例,能实现对车载产品集控

最近房车旅行很盛行,谁不想五一自驾游开车去外面玩?为了能提升用户体验,车企房车智能化升级越来越普遍,接下来小启给大家讲一个案例,启明云端ESP32-S3车载桥接器,感兴趣的可以看看。 一、ESP32-S3车载桥接器…

Mac上Maven的安装和环境变量配置保姆级教程(最新版实时更新)

目录 一、Maven的安装 1.进入官网(Maven官网)下载安装包并解压 2.这里我使用了Homebrew安装Maven 安装Homebrew: 安装Maven: 二、Maven配置环境变量 1.打开环境变量文档: 2.在弹出文档结尾加入配置&#xff1a…

安装Minitools报错_让我们手动安装 fastboot 驱动

安装Minitools报错_让我们手动安装 fastboot 驱动 求赞完整的报错信息解决办法步骤一:使用设备管理器手动添加硬件步骤二:确认驱动安装成功步骤三:测试驱动功能 让硬件的操作系统连接xshell 求赞 如果你是专门来找的这个报错,不是刷到的,我非…