一、准备工作:

(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.运行程序

最新文章

  1. UP Board 超详细开箱评测
  2. Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解
  3. java.lang.OutOfMemoryError: Java heap space
  4. Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台
  5. Mac下github项目检出与提交
  6. NodeJS的安装
  7. Java Socket网络编程常见异常(转)
  8. spark新能优化之数据本地化
  9. C#中对于可变性的限制
  10. Examples_06_02(android)DDMS的data文件中没有显示文件。
  11. 【27前端】背景半透明rgba LESS实践
  12. 《深入浅出 Java Concurrency》—锁紧机构(一)Lock与ReentrantLock
  13. Winform: use the WebBrowser to display XML with xslt, xml, xslt 转 html 字符串
  14. 解决在Ubuntu终端下使用cURL获取GBK格式的页面出现乱码问题
  15. CSRF的本质及防御
  16. JAVA面向对象-----main方法详解
  17. MAC 的ideal 修改 项目名称
  18. Python全栈-magedu-2018-笔记7
  19. MySQL高级知识(一)——基础
  20. discuz 忘记安全密码的处理方式 修改pre_common_setting表的数据,

热门文章

  1. 项目Beta冲刺 - 凡事预则立
  2. python开发应用笔记-SciPy扩展库使用
  3. SignalR入门一、通过 SignalR 2 进行实时聊天
  4. MATLAB中运算符优先级
  5. LeetCode 1219. Path with Maximum Gold
  6. 2-移远GSM/GPRS M26 模块 Mini板 开发板(M26入门)
  7. 将 iTunes 降级到支持安装 .ipa 文件的版本
  8. 干货 | 10分钟带你掌握branch and price(分支定价)算法超详细原理解析
  9. 安卓入门教程(十四)-菜单,ActionBar,对话框
  10. Time of Trial