Windows系统 为 QT5软件 搭建 OpenCV2 开发环境

我们的电脑系统:Windows 10 64位

Qt5 软件:Qt 5. 7. 0

OpenCV2 版本:OpenCV2.4.10

1. 安装 Qt 5 软件

请见博客:Windows系统 安装 Qt 5.7.0

注意: 请你务必要看这个Qt软件的安装教学。如果你没有像教学里面一样添加环境变量的话,请你添加Qt软件的环境变量。

2. 安装 CMake 软件

请见博客:Windows系统 安装 CMake

3. 下载 OpenCV 源代码

OpenCV官网下载:

4. 编译 OpenCV2.4.10

Step 1 . 打开 CMake 软件。

点击Browse Source… 按钮,选择 OpenCV源代码 所在目录:xxx/opencv/sources

Step 2 .

1. 我们在 xxx/opencv/ 路径里面, 新建一个名字为 opencv-qt5-build的文件夹。这个文件夹是用来存放 编译OpenCV后生成的文件 的文件夹。

2. 点击 Browse Build…(源码路径) 按钮,选择 xxx/opencv/opencv-qt5-build 路径

完成上面的 Step 1Step 2后,现在是这个样子的:

Step 3 .

  1. 现在点击:Configure (生成路径)按钮

  1. 再新弹出的窗口里面选择:MinGW Makefiles。如下图所示:

Step 4 . Configure结束后,会出现粉红色背景的各种选项。拖动滑块到页面下部位置。勾选:WITH_OPENGLWITH_QT 这两个复选框:

Step 5 . 再次点击Configure按钮。这次粉红色背景的各种选项,是刚刚检测到的Qt5相关的:

注意:如果你在安装Qt5软件的步骤中,没有给Qt5添加环境变量的话,那么在这一步,CMake软件是不会找到这次Qt5相关的项的。

如果你在这一步时,遇到问题。请参考这个网站:http://blog.csdn.net/zhaocj/article/details/38944037,或许可以解决你的问题。

Step 6 . 再次点击Configure按钮,知道粉红色消失

Step 7 . 点击 Generate 按钮,生成 makefile 文件.成功后,底下会提示 :Generating done。如下图所示:(这里,我需要了很多的警告:CMake Warning (dev),没有关系,不用管它。)

Step 8 . 打开 cmd,进入刚才设置的目标路径(D:\software_install_package_win\OpenCV2\opencv\opencv_qt5_build)

cd D:
D:
cd D:\software_install_package_win\OpenCV2\opencv\opencv_qt5_build

输入操作命令,如下图所示:

Step 9 . 输入 mingw32-make 命令开始编译(编译前,关闭所有杀毒软件)。如下图所示:

这是一个漫长的过程,大约需要 20分钟 ~ 60分钟。

在这漫长的编译时间里,我先简单介绍一下:OpenCV就是一个比较大的程序工程。我们使用CMake软件是为了生成OpenCV这个程序工程适合于我们电脑系统及开发软件的一个用于编译程序的MakeFile文件。 “使用 mingw32-make 命令编译OpenCV”:就是使用这个刚刚生成的MakeFile文件来编译OpenCV源代码。当编译完成之后,我们使用mingw32-make install命令,来自动安装:从OpenCV 源代码中编译生成的可执行文件。(对于Windows系统来说,其实这一步我们可以不做。因为它并没有安装在系统磁盘里面,只是存放在xxx\opencv\opencv_qt5_build路径里的install文件夹里,并且这个文件夹里的内容,我们又不用。)

大家都知道,要想让源代码生成可执行文件,必须要经历两个步骤:

1. 编译 :将源代码编译成多个链接文件

2. 链接 :将多个链接文件链接起来,生成一个可执行文件。

对于OpenCV,它是一个库,我们需要的是:它编译出来的链接文件,就可以了。当我们自己写程序的时候,如果程序里面使用到某些OpenCV相关的函数时,那么在编译和链接我们自己程序的时候。在编译过程中,就只是编译我们自己的程序源代码;而在链接过程中,是将我们的程序生成的链接文件和使用到的OpenCV的某些链接文件链接到一起,最终生成一个可执行文件。

大家现在也都轻身经历了,编译OpenCV源代码(生成链接文件)是需要花费很长的时间的。你可以想象一下:如果我们自己写的程序每次编译都要编译OpenCV源代码的话,那是一件多么坑爹的事情。如果我们先把OpenCV的源代码单独编译,生成链接文件。这样在我们自己的程序里面,如果使用到了OpenCV库的函数,我们只要让我们的程序知道OpenCV的链接文件的所在路径,我们就可以在编译程序的时候,只编译我们自己的程序,而在链接的时候,选择性的链接OpenCV的链接文件,这样生成可执行文件的速度就快得多了。

这就是为什么我们现在要花这么长的时间,在这里编译OpenCV源代码的原因。不知道我有没有说清楚。

好了,现在已经编译完成了。

Step 10 . 执行 mingw32-make install,大约 30秒 ~ 90秒 的时间。

5. 将编译生成的有用的OpenCV相关文件,整理出来

来到xxx/opencv/opencv_qt5_build/install路径里面:

我们需要这个路径里面的x64/mingw/binx64/mingw/lib 以及 install 这三个文件夹。(这三个文件夹是有用的,其他的都是没有用的文件)

Step 1 . 新建一个文件夹opencv2410-qt5,(文件夹名不能有中文,不能有空格和其他特殊符号):路径为:C:\third_packages\opencv\opencv2410-qt5

Step 2 . 拷贝这三个有用的文件夹,放在这个opencv2410-qt5文件夹下:

Step 3. 添加环境变量。将OpenCVbin目录添加到环境变量里面:

C:\third_packages\opencv\opencv2410-qt5\bin

做到这一步。为Qt CreatorOpenCV 的环境就算是搭建完成了。

下面我们编写一个类似 HelloWorld 的程序来测试一下,刚刚搭建的环境是否可以使用。

6. 测试

Step 1 . 打卡 Qt Creator,新建一个空的控制台应用工程。

将工程名命名为:helloWorld

Step 2 . .pro文件中添加 OpenCV头文件链接文件 所在路径

将下面的代码添加到 helloWorld.pro 文件里面:

INCLUDEPATH+=C:\third_packages\opencv\opencv2410-qt5\include\opencv \
C:\third_packages\opencv\opencv2410-qt5\include\opencv2 \
C:\third_packages\opencv\opencv2410-qt5\include LIBS+= C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_calib3d2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_contrib2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_core2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_features2d2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_flann2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_gpu2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_highgui2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_imgproc2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_legacy2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_ml2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_nonfree2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_objdetect2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_ocl2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_photo2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_stitching2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_ts2410.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_video2410.dll.a \
C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_videostab2410.dll.a \

添加后,如图所示:

Step 3 . 先将图片 image.jpg(去网上随便找一个图片,然后命名为:image.jpg) 放在与 main.cpp 文件同一文件夹下。

Step 4 . 将下面的代码复制到main.cpp文件里面:

#include <QCoreApplication>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp> int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); cv::Mat image = cv::imread("..\\helloWorld\\image.jpg");
cv::namedWindow("Image");
cv::imshow("Image", image); cv::waitKey(0);
return a.exec();
}

运行程序(快捷键:Ctrl + R):

注意:

图片的路径一定要正确。否则你会遇到下面的问题:

init done
opengl support available
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file D:\software_install_package_win\OpenCV2\opencv\sources\modules\highgui\src\window.cpp, line 269
terminate called after throwing an instance of 'cv::Exception'
what(): D:\software_install_package_win\OpenCV2\opencv\sources\modules\highgui\src\window.cpp:269: error: (-215) size.width>0 && size.height>0 in function imshow This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

解决办法:

就是使用正确的图片路径。并且路径不能有中文,空格和一些奇怪的符号。

搞定


Windows系统 为 QT5软件 搭建 OpenCV2 开发环境的更多相关文章

  1. Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境

    Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境 我们的电脑系统:Windows 10 64位 Visual Studio 软件:Visual Studio 20 ...

  2. Windows系统下Eclipse上搭建Python开发环境

    参考网站:   https://blog.csdn.net/zhangphil/article/details/78962159 1.先安装JDK 和python,参考网站:https://www.c ...

  3. Windows下visual studio code搭建golang开发环境

    Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...

  4. 在Windows系统中安装集成的PHP开发环境

    原文:在Windows系统中安装集成的PHP开发环境 刚想学php的,又不会配置复杂php的环境,可以使用集成的,目前网上提供常用的PHP集成环境主要有AppServ.phpStudy.WAMP和XA ...

  5. windows下VisualStudio和QtCreator搭建Qt开发环境

    一.简介 集成开发平台IDE都有各自的长处,编写Qt程序可根据自己的喜好来选择相应的IDE.下述文章都是装载博友的文章,其中有很多细节还得自己调整. 二.详解 1.VisualStudio搭建Qt开发 ...

  6. Windows 8(64位)如何搭建 Android 开发环境与真机测试(转)

    可以参考http://wenku.baidu.com/link?url=ghU6IFS1WJXLFKfM_0efv9YQEnMDBrdi9CXwirSs5IOLLeUfdIOh8OOVv0DX89Lt ...

  7. Windows10系统下使用Docker搭建ClickHouse开发环境

    前提 随着现在业务开展,几个业务系统的数据量开始急剧膨胀.之前使用了关系型数据库MySQL进行了一次数据仓库的建模,发现了数据量上来后,大量的JOIN操作在提高了云MySQL的配置后依然有点吃不消,加 ...

  8. 在Mac 系统上使用MAMP搭建PHP开发环境

    1.下载MAMP套件 下载地址为https://www.mamp.info/en/ 2.安装此.dmg文件 3.配置apache虚拟主机 (1)在/Applications/MAMP/conf/apa ...

  9. ubuntu下搭建JAVA开发环境【转】

    转自:http://jingyan.baidu.com/article/86fae346b696633c49121a30.html JAVA开发环境是一种跨平台的程序设计语言,可以在windows.L ...

随机推荐

  1. 远程激活.NET REFLECTOR(不能断网)

    由于是远程连接的服务器,使用.Net Reflector注册机激活时,不能断网. 如何禁止Reflector连接她的激活服务器,可进行如下操作: 1.添加hosts: 0.0.0.0 red-gate ...

  2. 重构代码 —— 函数即变量(Replace temp with Query)

    函数即变量,这里的函数指的是返回值为某一对象的函数.Replace temp with query,query 是一种查询函数. example 1 double price() { return t ...

  3. PKUSC2018 Slay The Spire

    有攻击牌和强化牌各 $n$ 张,强化牌可以让之后所有攻击牌攻击力乘一个大于 $1$ 的系数,攻击牌可以造成伤害 求所有“抽出 $m$ 张然后打 $k$ 张”能造成的伤害之和 $k,m,2n \leq ...

  4. docker下安装 Oracle11gR2

    这是第二次安装,在第一次安装过程部分内容参考自如下: http://blog.sina.com.cn/s/blog_d840ff330102v4j0.html docker下oracle11g安装 h ...

  5. SQL夯实基础(二):连接操作中使用on与where筛选的差异

    一.on筛选和where筛选 在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了,如果在我们编写查询的时候, 筛选条件的放置不管是在on后面还是where后面, 查出来的结果总 ...

  6. webpack 开发环境

    当项目逐渐变大,webpack 的编译时间会变长,可以通过参数让编译的输出内容带有进度和颜色. $ webpack --progress --colors 如果不想每次修改模块后都重新编译,那么可以启 ...

  7. Entity Framework中AutoDetectChangesEnabled為false時更新DB方法

    Entity Framework初始化時執行: Configuration.AutoDetectChangesEnabled = false; 會將數據庫變為NotTrack模式,也就是不會自動同步对 ...

  8. [转] 如何用BSP树生成游戏地图

    作者:Timothy Hely 当用对象随机填充某个区域如地下城中的房间时,你可能会遇到的问题是太过随机,导致分布疏密不均或混乱.在本教程中,我将告诉大家如何使用二进制空间划分法(游戏邦注:即Bina ...

  9. Operating System-进程间互斥的方案-保证同一时间只有一个进程进入临界区(3)- TSL指令

    本文接上一篇文章继续介绍如何实现同一时间只允许一个进程进入临界区的机制.本文主要介绍TSL指令. 方案汇总 屏蔽中断 锁变量 严格轮换法 TSL指令 Peterson解法 一.What is TSL ...

  10. mysql下this is incompatible with sql_mode=only_full_group_by解决方案

    本地测试没有问题,部署到客户服务器之后报如下错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 o ...