一、准备工作:

(1)在OpenCV官网下载3.4.2版本(注意选择Win pack),https://opencv.org/releases.html。

(2)下载Contrib模块,https://github.com/opencv/opencv_contrib/releases/tag/3.4.2(记住opencv是什么版本,contrib就下什么版本,必须对应否则编译会出问题)

(3)下载CMake,下载后直接安装即可。https://cmake.org/download/

二、编译生成

Opencv用于Mingw的版本编译没有VS那么顺利,总是有各种错误,而且不同版本还有不同的出错情况,我参考了其他博主的文章,但是可能因为版本不同,在我自己进行编译的时候还是出错了,

最后在stackoverflow和opencv的提问平台上找到了一些解决方案,终于成功编译出来,所以如果不是使用3.4.2版本的可能按照我的方法不一定能够完全编译通过。

如果遇到编译出错的不妨到Opencv官网的提问网页看看有没解决的方案,这里有专门关于QT的疑难杂症解答:

http://answers.opencv.org/questions/scope:all/sort:activity-desc/tags:qt/page:1/

(1)用记事本打开source\cmake\OpenCVCompilerOptions.cmake,找到  add_extra_compiler_option(-Werror=non-virtual-dtor)将其删除。

(2)打开source\modules\videoio\src\cap_dshow.cpp,在#include "precomp.hpp"后面增加#define STRSAFE_NO_DEPRECATE

(3)打开Ccmake-gui.exe

(4)点击Browse Source选择你解压出来的OpenCV Source目录,点击Browse Build选择一个目录用来存放生成的工程文件(自己创建一个目录),

(5)点击Configure,选择MinGW Makefiles,然后点击Finsh,然后CMake开始生成工程,注意此过程会从网上下载ffmpeg和ippicv两个库,所以需要联网。

(6)编译选择

1.如果你想编译成静态库,那么把BUILD_SHARED_LIBS的钩去掉,这样就不用每次发布程序都带一堆动态库。

2.如果你想减少库文件,可以勾选BUILD_opencv_world,这样很多库会集成到opencv_world342.lib,那么你每次新建工程就不需要填写一大堆库链接了,但是可能也会把很多没用到的库包含进来

增加程序体积,所以我没有勾选,还是保持原来的。

3.如果你已经下载了contrib模块,解压模块,然后设置OPENCV_EXTRA_MODULES_PATH指向contrib的modules目录。如果你没下载这个模块,就不用做这一步了,工程照样能够正常编译。

4.勾选WITH_QT

5.勾选WITH_OPENGL

6.勾选ENABLE_CXX11,这个版本用到了c++11的语法。

7.去掉WITH_MSMF,这个在VS中才需要勾选,QT版本不用勾选

(7)生成项目

选择完毕再次点击configure按钮,执行完毕还有红字则继续点击configure直到全部变成白色,然后点击Generate。

看到Configuring done、Generating done就表示已经搞定了。

(8)编译工程

1.打开cmd,进入到build目录。

2.输入mingw32-make,开始编译,如果没有出错,进度走到了100%,那么恭喜你编译成功了。

3.输入mingw32-make install

生成完成在build目录下会生成一个install的目录。

(9)测试

1.新建一个QT工程,在其.pro文件中添加include和lib目录,注意添加库的时候是有先后顺序之分的,

如果顺序不对会有很多undefined reference的错误提示,另外除了OpenCV本身的库以外可能还需要附加

其他的库,比如gdi,有用到摄像头要添加vfw等。

INCLUDEPATH += "F:\opencv\build_qt\install\include"
INCLUDEPATH += "F:\opencv\build_qt\install\include\opencv"
INCLUDEPATH += "F:\opencv\build_qt\install\include\opencv2" LIBS += -LF:\opencv\build_qt\install\x86\mingw\staticlib -lopencv_imgcodecs342 \
-lopencv_imgproc342 \
-lIlmImf \
-llibjasper \
-llibjpeg-turbo \
-llibpng \
-llibtiff \
-llibwebp \
-lopencv_core342 \
-lopencv_highgui342 \
-lopencv_img_hash342 \
-lopencv_rgbd342 \
-lzlib LIBS += -lGdi32 -lcomdlg32

2.添加测试代码

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void MainWindow::on_pushButton_clicked()
{
Mat mat;
mat = imread("home.jpg",CV_LOAD_IMAGE_UNCHANGED);
if (mat.empty())
return;
imshow("MyWindow", mat);
waitKey();
destroyWindow("MyWindow");
}

3.运行程序

QT5.10+MinGW+OpenCV3.4.2编译的更多相关文章

  1. OpenCV-3.4.2基于Qt-5.10.1的编译

    OpenCV-3.4.2基于Qt-5.10.1的编译 由于本人在使用CMake和MinGW编译OpenCV是遇到了很多问题,在这里记录下来.至于所需软件的安装和相应环境变量的设置,网上有很多详细的教程 ...

  2. 详解QT5.10.0搭载OpenCV3.4.0环境配置步骤说明

    一.准备工作: 1下载Qt5.10.0 和 Qt Creator 4.5.0软件(http://download.qt.io/official_releases/qt/) 2.下载opencv3.40 ...

  3. WIN10 64bit + QT5.10.0(MinGW3.5.0) + OpenCV3.4.1 无痛安装、配置

    安装QT和配置MinGW 官方下载qt-opensource-windows-x86-5.10.0.exe 正常步骤安装QT5.10.0,安装过程选择自带的MinGW3.5.0编译器即可. 打开QtC ...

  4. Qt5.10.1 在windows下vs2017静态编译

    1.在计算机上安装python库和perl库(因为后续的静态编译需要用到这两种语言),可以在命令行敲击“python”和“perl -v”检查是否安装成功. 2.修改msvc-desktop.conf ...

  5. VS2017 编译 QT5.10.1 X64位 静态库 MT

    参考文章 https://blog.csdn.net/Devout_programming/article/details/78827112 准备工作* Supported compiler (Vis ...

  6. qt5.10.1编译记录

    qt版本更新比较快,不知道选哪个版本合适,故选择一个较新版本的. 平台imx6    +    linux4.1.16   +   qt5.10.1 采用明远智睿提供的编译器:fsl-imx-fb-g ...

  7. windows下使用mingw和msvc静态编译Qt5.15.xx

    windows下使用mingw和msvc静态编译Qt5.15.xx 下载并安装相关依赖软件 Python version 2.7 https://www.python.org/downloads/ ( ...

  8. Win7下安装VS2017、安装Qt5.10.1以及在VS2017添加qt插件

    一.安装VS2017 1.下载VS2017 进入vs下载官网https://www.visualstudio.com/zh-hans/downloads/,选择所需要的vs版本,进行在线安装. 2.安 ...

  9. 回归Qt——写在Qt5.10发布之日

    今天偶然看到一条关于Qt5.10发布的消息,发现Qt经历了诺基亚风波之后发展得依然良好,感到很欣慰.回头看上次关注Qt技术还是2011年,那时候用Qt4.7做一个小项目,对于一个写Win32界面和MF ...

随机推荐

  1. sqlserver2005新特性介绍

    1.更强的编程能力-CLR集成 增强了数据库的编程能力,将一些逻辑层(Bll)转移到数据库中,减少了网络中的数据流量,但是增加了服务器cpu的负荷,当我们需要操作大量的数据,但是产生很少的数据,把这种 ...

  2. 深入详解JVM内存模型

    JVM内存结构 由上图可以清楚的看到JVM的内存空间分为3大部分: 堆内存 方法区 栈内存 其中栈内存可以再细分为java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代,新生代中还可以再次划分为 ...

  3. 初学FWT(快速沃尔什变换) 一点心得

    FWT能解决什么 有的时候我们会遇到要求一类卷积,如下: Ci=∑j⊕k=iAj∗Bk\large C_i=\sum_{j⊕k=i}A_j*B_kCi​=j⊕k=i∑​Aj​∗Bk​此处乘号为普通乘法 ...

  4. js 鼠标事件详细

    常用的几个类型 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDblClick HT ...

  5. 16-ESP8266 SDK开发基础入门篇--TCP 服务器 非RTOS运行版,串口透传(串口回调函数处理版)

    https://www.cnblogs.com/yangfengwu/p/11105466.html 其实官方给的RTOS的版本就是在原先非RTOS版本上增加的 https://www.cnblogs ...

  6. 1、kafka概述

    一.关于消息队列 消息队列是一种应用间的通信方式,消息就是是指在应用之间传送的数据,它也是进程通信的一种重要的方式. 1.消息队列的基本架构 producer:消息生产者. broker:消息处理中心 ...

  7. python计算1~2008中0和1的个数

    计算1~2008中所有自然数中1和0的个数总数. 通过自然数的大小划分区间,将自然数每位上的数载入列表,循环计数. list = [] onecount = 0 zerocount = 0 for i ...

  8. es6学习2:变量的解构赋值

    一:数组的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar ba ...

  9. 年轻人的第一个 Spring Boot 应用,太爽了!

    Spring Boot 大家都知道是啥吧? 还有不知道的来看这篇扫下盲:告诉你,Spring Boot 真是个牛逼货!. 顺便再往下看,栈长给你带来年轻人的第一个 Spring Boot 应用,撸码史 ...

  10. 《The Boost C++ Libraries》 第一章 智能指针

    Boost.SmartPointers中提供了多种智能指针,它们采用在智能指针析构时释放内存的方式,帮助管理动态分配的对象.由于析构函数在智能指针生命周期结束时被执行,所以由它管理的动态分配对象可以保 ...