当前位置: 首页 > news >正文

在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.lryc.cn/news/379132.html

相关文章:

  • 用Vite基于Vue3+ts+DataV+ECharts开发数据可视化大屏,即能快速开发又能保证屏幕适配
  • 大二学生眼中的Netty?基于Netty实现内网穿透!
  • JavaStringBuffer与StringBuilder
  • 云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长
  • 深度揭秘:深度学习框架下的神经网络架构进化
  • MySQL的DML语句
  • Wireshark的基本用法以及注意事项
  • 集团门户网站的设计
  • Tomcat基础详解
  • 【Python爬虫】爬取名人名言页面并进行简单的数据清洗(入门级)
  • Microsoft Visual C++ Redistributable 【安装包】【高速下载】
  • MFC绘制哆啦A梦
  • 网络编程(TCP协议,UDP协议)
  • 读取Jar包下文件资源的问题及解决方案
  • C++ 反转一个二进制串
  • 黑神话悟空-吉吉国王版本【抢先版】
  • 【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)
  • java拼图小游戏项目
  • [C++][数据结构][跳表]详细讲解
  • tinyxml
  • Docker(三)-Docker常用命令
  • [MRCTF2020]PixelShooter
  • vue实现的商品列表网页
  • 【泛微系统】e-cology非标配功能概览
  • Python基础教程(二十八):pip模块
  • 通信系统概述
  • http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解
  • Hadoop 面试题(四)
  • 绽放光彩的小程序 UI 风格
  • 电脑文件夹怎么加密?文件夹加密的5种方法