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

7 篇文章 0 订阅

一、准备软件

  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 off

set 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

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

  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# OpenCV-MinGW-Build MinGW version of OpenCV compiled on Windows. ## [OpenCV 3.4.1](https://github.com/huihut/OpenCV-MinGW-Build/tree/OpenCV-3.4.1) ``` git clone -b OpenCV-3.4.1 git@github.com:huihut/OpenCV-MinGW-Build.git ``` ## [OpenCV 3.3.1](https://github.com/huihut/OpenCV-MinGW-Build/tree/OpenCV-3.3.1) ``` git clone -b OpenCV-3.3.1 git@github.com:huihut/OpenCV-MinGW-Build.git ``` ## Compiling Environment * Windows-10-64bit * MinGW-5.3.0-32bit * CMake-3.9.2 ## How to compile OpenCV * [wiki.qt . How to setup Qt and openCV on Windows](https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows) * [blog.huihut . OpenCV使用CMake和MinGW编译安装及其在Qt配置运行](https://blog.huihut.com/2017/12/03/CompiledOpenCVRunInQt/) ## Using OpenCV in Qt Add OpenCV library file and include path to Qt `.pro` file. * My version of OpenCV : `OpenCV 3.3.1` * My OpenCV path : `E:\OpenCV_3.3.1\OpenCV-MinGW-Build` So the configuration is as follows (**You need to modify it according to your OpenCV.**) : ``` win32 { INCLUDEPATH += E:\OpenCV_3.3.1\OpenCV-MinGW-Build\include LIBS += E:\OpenCV_3.3.1\OpenCV-MinGW-Build\bin\libopencv_*.dll } ``` or ``` win32 { INCLUDEPATH += E:\OpenCV_3.3.1\OpenCV-MinGW-Build\include LIBS += -LE:\OpenCV_3.3.1\OpenCV-MinGW-Build\bin \ -llibopencv_calib3d331 \ -llibopencv_core331 \ -llibopencv_dnn331 \ -llibopencv_features2d331 \ -llibopencv_flann331 \ -llibopencv_highgui331 \ -llibopencv_imgcodecs331 \ -llibopencv_imgproc331 \ -llibopencv_ml331 \ -llibopencv_objdetect331 \ -llibopencv_photo331 \ -llibopencv_shape331 \ -llibopencv_stitching331 \ -llibopencv_superres331 \ -llibopencv_video331 \ -llibopencv_videoio331 \ -llibopencv_videostab331 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值