在Windows上用MinGW编译OpenCV项目运行全流程
一、准备软件
- OpenCV源码
- CMake工具
- MinGW工具链(需要选用 posix 线程版本:原因见此)
二、操作步骤
官网提供了VC16构建版本的二进制包,但是没有给出GCC编译的版本。所以如果使用MinGW进行构建,那就只能从源码开始构建了。
但是如果你愿意用MSVC的话,那就可以跳过编译的步骤(当然也可以不跳过),直接使用二进制文件,进行后面的软件设计:
2.1 使用cmake
打开 cmake-gui.exe。
选择目录、选择编译器。通常应该能自动选上MinGW,如果没有选上的话,可能MinGW路径没有加入环境变量:

输入 world,打开 BUILD_opencv_world 的开关,这控制着将所有有关OpenCV的函数全部输出到一个文件中。
如果你不需要这一点,也可以不选。
中途可能报错,但是没有关系,OpenCV的主要函数功能应该都是可以编译通过的:

2.2 使用mingw
在build目录下打开cmd,运行下面两行。其中 -j8 表示启用8线程并行编译,也可以不加:
mingw32-make -j8
mingw32-make install
第一条命令会运行很长很长时间。
第二条命令会创建一个名为 install 的文件夹,目录结构大概是这个样子:

这个文件夹路径要记住,后面要用。
2.3 编写OpenCV程序
写一段计算两个旋转矩形的IoU的算法,其中 rotatedRectIOU 函数来自于 ~\opencv\modules\dnn\src\nms.cpp 文件。
但是由于原本的这个函数是 inline 的,所以无法直接调用。
我这里直接复制过来了:
/* main.cpp */#include "opencv2/opencv.hpp"using namespace cv;float rotatedRectIOU(const RotatedRect& a, const RotatedRect& b) {std::vector<Point2f> inter;int res = rotatedRectangleIntersection(a, b, inter);if (inter.empty() || res == INTERSECT_NONE)return 0.0f;if (res == INTERSECT_FULL)return 1.0f;float interArea = contourArea(inter);return interArea / (a.size.area() + b.size.area() - interArea);
}int main() {auto rect1 = RotatedRect(Point2f(2, 2), Size2f(3, 4), 45);auto rect2 = RotatedRect(Point2f(2, 2), Size2f(4, 3), 30);auto iou = rotatedRectIOU(rect1, rect2);std::cout << "IoU: " << iou << std::endl;return 0;
}
测试输入的两个旋转矩形,画出来是这么个效果:

我拿尺子测量了一下,矩形面积12平方 ,平行四边形面积9.3平方。
按照定义,IoU应大致为:
I o U = 9.3 / ( 12 + 12 − 9.3 ) = 0.633 IoU = 9.3 / (12 + 12 - 9.3) = 0.633 IoU=9.3/(12+12−9.3)=0.633
拿程序验证一下,编写 dist.bat 文件,其中 ^ 是转义的意思,可以方便将多行代码写到一行内:
@echo offset install=<INSTALL_FOLDER>g++ main.cpp -o main.exe ^-I %install%/include ^-L %install%/x64/mingw/lib ^-l opencv_world490
其中 -I 控制的是头文件目录,-L 控制的是库文件目录,-l 是具体要链接的库文件的名字(去掉开头的 lib 和后面的 .dll.a 后缀)。
INSTALL_FOLDER:这里填写前面 mingw32-make install 命令生成出来的文件夹路径。如果操作步骤都和我一致的话,路径应该是 ~/opencv/build/install。
mingw:这里使用MinGW编译,所以文件夹是在 mingw 路径。如果使用MSVC编译,文件夹路径应该类似于是 vc16。
world:前面勾选了 BUILD_opencv_world 开关,所以这里会是 opencv_world 这个库文件名。如果你前面没有勾选,则你在程序中引用了哪个库文件的函数,则需要加上哪个库的名字。
490:我这里使用的是 4.9.0 的版本,所以数字编号是 490。如果版本不同,需要根据实际情况修改。
2.4 运行程序
运行程序,需要将 ~\install\x64\mingw\bin 目录下的 libopencv_world490.dll 文件拷贝到运行程序的同级目录下。
最后运行 main.exe ,返回结果为:
IoU: 0.634597
和绘图计算结果验证正确。
相关文章:
在Windows上用MinGW编译OpenCV项目运行全流程
一、准备软件 OpenCV源码CMake工具MinGW工具链(需要选用 posix 线程版本:原因见此) 二、操作步骤 官网提供了VC16构建版本的二进制包,但是没有给出GCC编译的版本。所以如果使用MinGW进行构建,那就只能从源码开始构建…...
用Vite基于Vue3+ts+DataV+ECharts开发数据可视化大屏,即能快速开发又能保证屏幕适配
数据可视化大屏 基于 Vue3、Typescript、DataV、ECharts5 框架的大数据可视化(大屏展示)开发。此项目vue3实现界面,采用新版动态屏幕适配方案,全局渲染组件封装,支持数据动态刷新渲染、内部DataV、ECharts图表都支持自…...
大二学生眼中的Netty?基于Netty实现内网穿透!
爷的开场白 掘金的朋友们大家好!我是新来的Java练习生 CodeCodeBond! 这段时间呢,博主在学习Netty,想做一个自己感兴趣好玩的东西,那就是内网穿透!!(已经实现主要代理功能但有待优化…...
JavaStringBuffer与StringBuilder
StringBuffer、StringBuilder 文章目录 StringBuffer、StringBuilderStringBuffer和StringBuilder的理解可变性分析对于String对于StringBuilder 常用方法执行效率对比 StringBuffer和StringBuilder的理解 String 不可变的字符序列 StringBuffer 可变的字符序列 JDK1.0声明&…...
云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长
竹叶青茶以其别具一格的风味与深厚的历史底蕴,一直被誉为茶中瑰宝。历经千年的传承与创新,竹叶青不仅坚守着茶叶品质的极致追求,更在数字化的浪潮中,率先打破传统,以科技力量赋能品牌,成为茶行业的领军者。…...
深度揭秘:深度学习框架下的神经网络架构进化
深度学习框架下的神经网络架构经历了从基础到复杂的显著进化,这一进程不仅推动了人工智能领域的突破性进展,还极大地影响了诸多行业应用。本文旨在深入浅出地揭示这一进化历程,探讨关键架构的创新点及其对现实世界的影响。 引言:…...
MySQL的DML语句
文章目录 ☃️概述☃️DML☃️添加数据☃️更新和删除数据☃️DML的重要性 ☃️概述 MySQL 通用语法分类 ● DDL: 数据定义语言,用来 定义数据库对象(数据库、表、字段) ● DML: 数据操作语言,用来对数据库表中的数据进行增删改 …...
Wireshark的基本用法以及注意事项
Wireshark 是一个流行的网络协议分析工具,可以捕获和分析网络数据包。以下是一些常见的 Wireshark 的用法: 安装和启动:首先需要下载和安装 Wireshark。安装完成后,可以通过启动 Wireshark 应用程序来打开它。 选择网络接口&…...
集团门户网站的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,论坛管理,集团文化管理,基础数据管理,公告通知管理 前台账户功能包括:系统首页,个人中心,论坛࿰…...
Tomcat基础详解
第一篇:Tomcat基础篇 lecture:邓澎波 一、构建Tomcat源码环境 工欲善其事必先利其器,为了学好Tomcat源码,我们需要先在本地构建一个Tomcat的运行环境。 1.源码环境下载 源码有两种下载方式: 1.1 官网下载 https://…...
【Python爬虫】爬取名人名言页面并进行简单的数据清洗(入门级)
目录 资源链接 一、网站选择 二、数据爬取要求 三、数据清洗要求 四、实现代码 1.数据采集 2.数据清洗 资源链接 下面有笔者所放的源码下载链接,读者可自行下载: 链接:https://pan.baidu.com/s/1YmTdlnbSJLvLrrx92zz6Qg 提取码&…...
Microsoft Visual C++ Redistributable 【安装包】【高速下载】
方法1、可以从官方下载,如下图 Visual C Redistributable for Visual Studio 2015 但是此链接只有一个版本 方法2 已经下载好并且已经整理好了2008--2022的所有版本点击下方链接即可高速下载 如果是win7-win8-win10-win11直接可以下载2015--2022版本,…...
MFC绘制哆啦A梦
文章目录 OnPaint绘制代码完整Visual Studio工程下载其他卡通人物绘制 OnPaint绘制代码 CPaintDC dc(this); // 用于绘画的设备上下文CRect rc;GetWindowRect(rc);int cxClient rc.Width();int cyClient rc.Height();// 辅助线HPEN hPen CreatePen(PS_DOT, 1, RGB(192, 192,…...
网络编程(TCP协议,UDP协议)
目录 网络编程三要素 IP IPv4 InetAddress类 端口号 协议 UDP协议 UDP协议发送数据 UDP协议接收数据 UDP的三种通信方式(代码实现) TCP协议 TCP通信程序 三次握手和四次挥手 练习 1、客户端:多次发送数据服务器:接收多次接收数据,并打印 2、客户端…...
读取Jar包下文件资源的问题及解决方案
问题 项目A代码调用到Resouces下的文件a.sh,打包成Jar包后,项目B调用对应方法时,出现报错,找不到a.sh文件路径,原来的代码可能是: URL resource getClass().getClassLoader().getResource("a.sh&qu…...
C++ 反转一个二进制串
描述 一个32位有符号整数,用二进制编码来表示。现需要将该二进制编码按位反转,计算出反转后的值。 示例1 输入: 1 返回值: -2147483648 说明: 00000000 00000000 00000000 00000001 翻转后为 10000000 000000…...
黑神话悟空-吉吉国王版本【抢先版】
在中国的游戏市场中,一款名为“黑神话悟空”的游戏引起了广泛的关注。这款游戏以中国传统的神话故事“西游记”为背景,创造了一个令人震撼的虚拟世界。今天,我们要来介绍的是这款游戏的一种特殊版本,那就是吉吉国王版本。 在吉吉国…...
【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)
【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结)1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…...
java拼图小游戏项目
创建一个Java拼图小游戏是一个有趣且富有教育意义的项目,可以锻炼你的编程技能。以下是开发一个基本拼图游戏可能需要考虑的几个步骤: 项目规划: 确定游戏的基本规则和玩法。设计游戏的界面和用户交互。 环境搭建: 确保你的开发环…...
[C++][数据结构][跳表]详细讲解
目录 0.什么是跳表?1.SkipList的优化思路2.SkipList的效率如何保证?3.SkipList实现4.SkipList VS 平衡搜索树 && Hash 0.什么是跳表? SkipList本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
