在Windows上用MinGW编译OpenCV项目运行全流程

一、准备软件

  1. OpenCV源码
  2. CMake工具
  3. MinGW工具链(需要选用 posix 线程版本:原因见此)

二、操作步骤

官网提供了VC16构建版本的二进制包,但是没有给出GCC编译的版本。所以如果使用MinGW进行构建,那就只能从源码开始构建了。

但是如果你愿意用MSVC的话,那就可以跳过编译的步骤(当然也可以不跳过),直接使用二进制文件,进行后面的软件设计:

OpenCV源码
CMake
mingw32-make
头文件
.a
.dll
发布版
源程序
gcc
exe
运行结果

2.1 使用cmake

打开 cmake-gui.exe

选择目录、选择编译器。通常应该能自动选上MinGW,如果没有选上的话,可能MinGW路径没有加入环境变量:

cmake-configure

输入 world,打开 BUILD_opencv_world 的开关,这控制着将所有有关OpenCV的函数全部输出到一个文件中。

如果你不需要这一点,也可以不选。

中途可能报错,但是没有关系,OpenCV的主要函数功能应该都是可以编译通过的:

cmake-generate

2.2 使用mingw

在build目录下打开cmd,运行下面两行。其中 -j8 表示启用8线程并行编译,也可以不加:

mingw32-make -j8
mingw32-make install

第一条命令会运行很长很长时间。

第二条命令会创建一个名为 install 的文件夹,目录结构大概是这个样子:

编译OpenCV

这个文件夹路径要记住,后面要用。

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+129.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

和绘图计算结果验证正确。

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

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

相关文章

make与makefile

目录 一、make的默认目标文件与自动推导 二、不能连续make的原因 执行原理 touch .PHONY伪目标 make指令不回显 makefile多文件管理 简写依赖方法 三、回车与换行 四、缓冲区 一、make的默认目标文件与自动推导 假设这是一个makefile文件&#xff0c;make的时候默认生…

Origin电源维修高压发生器GEXUS-3 GEXUS-15R-02U

GEXUS-3电源维修 Origin高压发生器维修 Origin电源维修 光电设备电源维修 Origin高压电源维修故障分析应注意两点&#xff1a; 故障分析检测和故障硬件更换&#xff0c;根据高压电源故障提示和工作表现初步判断故障的类型和哪些硬件出了问题&#xff0c;再根据初步判断缩小检测…

了解Spring的BeanPostProcessor

了解Spring的BeanPostProcessor Spring框架提供了一种机制&#xff0c;允许在Spring容器实例化Bean之前和之后进行自定义的修改。这个机制就是BeanPostProcessor接口。BeanPostProcessor是Spring的核心接口之一&#xff0c;用于在Spring容器创建和初始化Bean的过程中进行干预和…

Java-拼接字符串数组(String.join()方法)

问题引入 刷算法题lc2288的时候遇见的一个小细节&#xff0c;记录一下&#xff0c;有兴趣的朋友可以做一下&#xff0c;练习一下哈哈~ 此题需要使用大家都比较熟悉的split方法将句子按照空格拆分为字符串数组。 然后再在数组中对每一个字符串操作&#xff0c;操作完成后要求…

【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)

【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理&#xff08;完结&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理&#xff08;完结&#xff09;1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…

【linux】shell脚本中设置字体颜色,背景颜色详细攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Nginx Proxy 代理测试

目录 https://blog.csdn.net/Lzcsfg/article/details/139781909 一. 实验准备 二. 配置反向代理 三. 配置二层代理 解释流程 一. 实验准备 关闭防火墙和selinux&#xff0c;准备三台同一网段的虚拟机 localhostRoucky_linux9.4192.168.226.20localhostRoucky_linux9.419…

高校新闻头条系统

摘 要 随着互联网技术的快速发展&#xff0c;网络几乎成为了人们搜集信息和交流沟通最方便、快捷的通道&#xff0c;科技创新一直在影响着人们的生活&#xff0c;人们的衣食住行也在不断变化&#xff0c;与此同时&#xff0c;也大大改变了人们获取信息的方式&#xff0c;人们获…

Unity的渲染管线

渲染管线 概念 Unity的渲染管线是在图形学渲染管线的基础上&#xff0c;加上了高度可配置可扩展的框架&#xff0c;允许开发者自定义渲染流程。 渲染管线&#xff08;渲染流水线&#xff09;概述&#xff1a;将数据分阶段的变为屏幕图像的过程。 数据指的是模型、光源和摄像…

『FPGA通信接口』LVDS接口(4)LVDS接收端设计

文章目录 1.LVDS接收端概述2逻辑框图3.xapp855训练代码解读4.接收端发送端联调5.传送门 1.LVDS接收端概述 接收端的传输模型各个属性应该与LVDS发送端各属性一致&#xff0c;例如&#xff0c;如果用于接收CMOS图像传感器的图像数据&#xff0c;则接收端程序的串化因子、通道个…

最新版ChatGPT对话系统源码 Chat Nio系统源码

最新版ChatGPT对话系统源码 Chat Nio系统源码 支持 Vision 模型, 同时支持 直接上传图片 和 输入图片直链或 Base64 图片 功能 (如 GPT-4 Vision Preview, Gemini Pro Vision 等模型) 支持 DALL-E 模型绘图 支持 Midjourney / Niji 模型的 Imagine / Upscale / Variant / Re…

【for循环】最大跨度

【for循环】最大跨度 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 【参考代码】 #include <iostream> using namespace std; int main(){ int n;int max 0, min 100;cin>>n;for(int i1; i<n; i1){int a;cin>>a;if(a>max){max a;}i…

VTABLE 基本表和透视表的分页功能

基本表和VTable数据分析透视表支持分页&#xff0c;但透视组合图不支持分页。 配置项&#xff1a; pagination.totalCount&#xff1a;数据项的总数。数据透视表中的VTable字段将被自动补充&#xff0c;以帮助用户获取数据项的总数。pagination.perPageCount&#xff1a;显示每…

STM32通过SPI硬件读写W25Q64

文章目录 1. W25Q64 2. 硬件电路 3. 软件/硬件波形对比 4. STM32中的SPI外设 5. 代码实现 5.1 MyI2C.c 5.2 MyI2C.h 5.3 W25Q64.c 5.4 W25Q64.h 5.5 W25Q64_Ins.h 5.6 main.c 1. W25Q64 对于SPI通信和W25Q64的详细解析可以看下面这篇文章 STM32单片机SPI通信详解-C…

Java宝藏实验资源库(8)多态、抽象类和接口

一、实验目的 理解面向对象程序的基本概念。掌握类的继承和多态的实现机制。熟悉抽象类和接口的用法。 二、实验内容、过程及结果 **1.Using the classes defined in Listing 13.1, 13.2, 13.3, write a test program that creates an array of some Circle and Rectangle in…

轨道地铁智能录音无线通信解决方案

一、行业背景 随着社会经济和通信行业的迅速发展&#xff0c;电话已成为企业运作中必不可少的联络手段。但电话作为即时沟通手段&#xff0c;往往无法进行事后追溯和复盘&#xff0c;容易造成不必要的麻烦。尤其在交通轨交行业领域&#xff0c;对语音工作的发生过程更需要有个…

全栈人工智能工程师:现代博学者

任何在团队环境中工作过的人都知道&#xff0c;每个成功的团队都有一个得力助手——无论你的问题性质如何&#xff0c;他都能帮助你。在传统的软件开发团队中&#xff0c;这个人是一个专业的程序员&#xff0c;也是另一种技术的专家&#xff0c;可以是像Snowflake这样的数据库技…

基于STM8系列单片机驱动74HC595驱动两个3位一体的数码管

1&#xff09;单片机/ARM硬件设计小知识&#xff0c;分享给将要学习或者正在学习单片机/ARM开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 为了节省单片机MCU的IO口资源驱动6个数码管&…

CAC 2.0融合智谱AI大模型,邮件安全新升级

在数字化时代&#xff0c;电子邮件的安全问题日益成为关注的焦点。Coremail CACTER邮件安全人工智能实验室&#xff08;以下简称“CACTER AI实验室”&#xff09;凭借其在邮件安全领域的深入研究与创新实践&#xff0c;不断推动技术进步。 此前&#xff0c;CACTER AI实验室已获…

docker进阶篇

docker进阶篇 (重点) 1、docker run2、docker ps3、docker restart4、docker pull5、docker stop6、docker logs7、docker stats8、docker rm(重点) 9、docker exec10、查看本机镜像docker image11、发布镜像docker commit12、docker save(例如保存为tar给别人用)13、删除镜像1…