Qt中添加OpenCV库
配置在Qt中的OpenCV,看了很多“教程”,最终成功。记一下过程。
本机配置:
window7 32位系统;
qt-opensource-windows-x86-mingw492-5.5.1;
OpenCV2.4.10。
对于我来说配置过程比较难,因为目前我没用过Qt和Cmake,之前一直用VS编译C++,也没有用过MinGW,所以看教程中的各种命令或者执行文件都比较费时。这次各种尝试后成功。参考资料的连接在最后,其中帮助我最大的就是那一篇纯英文的,很详细。
前期准备
Qt5的opensource版使用的是MinGW,并且不同于Qt4,Qt5不能在QtCreater中更改库文件为vc。而OpenCV在2.4之后就仅仅提供VS版本的库文件,位置在%OpenCV%\build\x86 或 %OpenCV%\build\x64的“vc1x”文件夹中(%OpenCV%表示OpenCV的安装目录)。
上第一个图片为opencv2.4.10中build\x86\的内容;第二个图片为opencv2.3.1中build\x86\的内容。很明显oepencv2.3.1中有一个mingw的库文件夹而opencv2.4.10就仅仅支持vc库了。因为电脑同时有这两个版本的opencv库文件,所以第一次配置我直接使用的是2.3.1版本(不需要重新编译MinGW版本库文件嘛),但是经过下面的正确配置后,测试程序一直无法通过,现象在下面会细说。
基于以上原因,所以必须要在配置Qt前将OpenCV编译成一个MinGW的库文件版本。这也是为什么这么教程里要用一个CMake软件编译OpenCV。到这里,我可以列出在Qt5中配置OpenCV前需要准备的软件:
qt-opensource-windows-x86-mingw492-5.5.1;
cmake-3.6.0-rc3-win32-x86;
opencv2.4.10。
Qt5和cmake版本是我下载的最新版本,现在时间是2016-6-28。以下的内容不会详细讲述每一步配置步骤,在必要的地方我会附上相应的资料,这些资料已经解释地十分详细。这里我着重写的是我在配置中遇到的问题。
Qt5,CMake和OpenCV的安装
安装的教程数不胜数,这里不再赘述。注意windows中的环境变量的配置。
其中在Qt5的安装中注意安装MinGW。我这里的版本是4.9.2,如下图所示。
安装完成Qt5后,注意要将Qt5的路径加入环境变量中,在后面使用CMake编译OpenCV库时,CMake会调用MinGW组件程序,即在安装Qt中勾选的MinGW程序,并且还会调用Qt本身的编译程序qmake.exe,这两个文件的路径都要在环境变量中,具体为:
%Qt5%\Tools\mingw492_32\bin
%Qt5%\5.5\mingw492_32\bin
以上%Qt5%为我的Qt安装目录,例如我的是C:\Qt\Qt5.5.1,则将其代入以上路径后等价于:
C:\Qt\Qt5.5.1\Tools\mingw492_32\bin
C:\Qt\Qt5.5.1\5.5\mingw492_32\bin
OpenCV库的编译
将OpenCV库编译成MinGW版需要使用CMake软件,别的软件是否好用我没有用过。安装时要注意勾选将CMake的路径(Path)加到环境变量中,否则当后面使用控制台(cmd或者powershell)调用CMake编译安装命令时会出现 无效命令 的提示。
注意,在安装完成后先不要直接编译OpenCV的MinGW版本,要保证Qt已经安装完成。否则会缺少必要的执行程序导致无法编译成需要的MinGW库。
打开CMake,参考这篇资料选取OpenCV源文件位置和输出文件位置,点击configure。注意,这里我没有完全按照这一篇资料,而是根据另一篇资料的教程。傻瓜式的总结一下,这里需要点击“2次configure 和 1次generate”。
我这里自己选取了C和C++编译器,具体为下图步骤点:
我选取了"Specify native compilers",并在下一步选择了编译器,因为之前直接选取“Use default native compilers”时总是出错,我猜测我的默认编译器不对。
我自己选择的编译器就是Qt中的MinGW中的gcc和g++,如上图。 选取后finish,则进入其他教程中的正常步骤,如下图。
成功后,在第二次configue前,需要有两个地方勾选或者更改,第一个是下图处:
上图选取的地方是CMake生成的configure类型,可以填入Debug和Release,这样生成的库文件就可以指出上面两种版本的编译。
另外必须要勾选下图中的 WITH_QT,以使CMake编译出可以供Qt使用的库文件(我认为就是在这里才会需要cmake去调用qt中的qmake指令)。
至此,就可以点击generate进行生成了。
我在这之后出现了错误,经过查看得知,就是因为CMake会调用qmake执行文件,而我的环境变量的第一行是 C:\Python27\Lib\site-packages\PyQt4 (这是因为前人使用这台电脑是安装了PyQt),而这个目录下有一个qmake执行文件,但这个文件不满足本次编译的要求,所以总是出错。于是我将C:\Qt\Qt5.5.1\5.5\mingw492_32\bin 和 %OpenCV_MinGW%\bin 插入到前面即可。
这之后就打开控制台软件,依次键入 mingw32-make 和 mingw32-make install ,如之前配置无误,程序就会依次开始编译和安装,下图依次为相应结果:
Qt配置
opencv的MinGW库编译好后,就可以直接在Qt中配置了。Qt的配置是靠Qt工程创建后生成的那个pro文件,通过在pro文件中配置文本即可,pro文件的编写规则和技巧可以参考这篇资料,不再赘述,下面是我的配置文件内容,使用的测试实例是Qt的控制台应用:
QT += core
QT -= gui TARGET = TestQt
CONFIG += console
CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp INCLUDEPATH += F:/opencv2.4.10/build/include/opencv \
F:/opencv2.4.10/build/include/opencv2 \
F:/opencv2.4.10/build/include LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libcv2.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_calib3d2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_contrib2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_nonfree2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_ocl2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_gpu2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_photo2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_objdetect2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_legacy2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_ml2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_video2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_features2d2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_highgui2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_imgproc2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_flann2410.dll.a
LIBS +=F:/opencv2.4.10/OpenCVMinGW/lib/libopencv_core2410.dll.a
我写的很麻烦,路径都是复制粘贴好多遍,可以使用 -L 和 -l参数进行简化。在INCLUDEPATH中的文件目录分级斜杠很有意思,我这里用的都是 / (斜杠),根据测试和查阅资料,我发现 \(反斜杠)和 \\(双反斜杠)都可以使用。使用控制台应用作为测试的原因是这样编写测试文件比较简单,并且不会过多牵扯Qt编程的相关结构和知识,测试代码也很简单,如下:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp> using namespace cv;
int main()
{
std::cout<<"fuck"<<std::endl;
Mat img;
img = imread("D:/c.jpg");
imshow("test", img);
waitKey();return 0;
}
测试成功截图如下:
在配置过程中,原先使用opencv2.3.1,这个库中就有mingw版的库文件,无需用source文件重新编译(这个版本的opencv很奇怪的没有source文件夹,而2.4.x之后的版本与这个版本的文件组织结构差别很大)。原以为是一个方便,但实际使用QT时发现,就算我的.pro文件配置好也不能正常运行测试程序,即显示出一张图片(之所以认为我的配置文件配置好是由于在配置完pro文件后,编写代码过程中使用include时可以索引到opencv库中的头文件)。现象是只要使用opencv的函数就不能正常运行程序,程序开头的打印字符串都没有显示,末尾的打印字符串更是不能出现。另一个现象是,当使用Mat关键字创建一个Mat类而不进行其他相关opencv()函数调用时,不会出现错误,但只要使用别的函数,例如Mat img; img = imread(...);时就会出错。编译问题没有一条,但就是不能出结果。
参考资料
http://www.laganiere.name/opencvCookbook/chap1s1_2.shtml
http://blog.163.com/allegro_tyc/blog/static/337437682014102411829281/
http://stackoverflow.com/questions/14919186/qt-creator-5-0-1-with-opencv-2-3-4-on-windows/15268560#15268560
http://blog.sina.com.cn/s/blog_7edf527e0101359b.html
http://blog.chinaunix.net/uid-23592843-id-2495471.html
http://www.cnblogs.com/bolgofzjr/p/5623032.html
Qt中添加OpenCV库的更多相关文章
- Qt中使用OpenCV库
原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100qwi3.html 心情真是好啊,曾经一度想放弃使用Qt加OpenCV进行数字图像处理了,幸好坚持住了,今 ...
- 在Qt Creator中添加OpenCV库
在项目的pro文件中添加如下代码:INCLUDEPATH += D:/opencv/build/include win32:CONFIG(debug, debug|release): {LIBS += ...
- QT中添加 动态库(.so) 和 静态库 (.a) 的方法
在QT 的Makefile文件中: 1 添加动态库,如lipcap.so 则,在LIBS一行中添加“-L/usr/local/lib -lpcap”,依据自己的情况修改libpcap.so的路径 2 ...
- Qt中添加静态库.lb,.a和动态库.dll,.so,头文件和.cpp文件
添加步骤 1.-Qt Creator中,"项目"------"添加库"2.把静态库和动态库文件放到项目文件夹中3.在.pro文件中会添加如下代码: - 添加动态 ...
- OpenCV2学习笔记03:Qt中配置OpenCV环境
在Qt中开发基于OpenCV的应用时,需要配置对应函数库到环境变量,这时候我们需要使用到qmake能够识别的变量来指定环境变量. INCLUDEPATH: 用于指定搜索头文件到文件夹路径. LIBS: ...
- iOS——Xcode中添加第三方库
一.只有.h和.a文件的库 1.向项目中添加三方库文件 如果添加的第三方库只有.h和.a文件,直接把文件夹拖进项目下面,这时会弹出下面的提示框,一定要勾选下面选择的选项: 这里要注意,在Add to ...
- VS2010中添加lib库引用
VS2010中添加lib库引用: 1 菜单 项目---> 属性--->配置属性-->链接器---->输入---附加依赖项, 加入库名,如: my_API.lib; 或是在c ...
- VS中添加第三方库及相对路径设置
原文 VS中添加第三方库及相对路径设置 对于一些第三方的SDK,一般会包含头文件(*.h),静态库文件(*.lib)和动态库文件(*.dll). 1. 文件位置:为了提高程序的可移植性,将第三库放在 ...
- [学习笔记] 在Eclipse中添加用户库 Add User Libraries ,在项目中引用用户库
如果还没有安装Eclipse, 则请参考前文: [学习笔记] 下载.安装.启动 Eclipse(OEPE) 添加用户库 本文主要介绍在项目中直接使用第三方库的情况.就是把第三方的jar文件直接放到某 ...
随机推荐
- Android 有用的快捷键
The powerful Android Studio 08 Jun 2016 Android Studio is the official tool for Android development ...
- Composer配置中国镜像
用法: 有两种方式启用本镜像服务: 将以下配置信息添加到 Composer 的配置文件 config.json 中(系统全局配置).见“例1” 将以下配置信息添加到你的项目的 composer.jso ...
- hdoj分类
http://blog.csdn.net/lyy289065406/article/details/6642573 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 ...
- Vue.js实现拼图游戏
Vue.js实现拼图游戏 之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/ ...
- Application值传递。
1.layout下面的布局 activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...
- sql server遍历表不用游标和临时表的方法
表结果如图 )) ,'Sky,Blue,Water' ,'Book,Apple,Shirt' ,'Cup,Yellow,org' ,'box,phone,paper' GO SELECT id,SUB ...
- MongoDB 分片操作
添加分片 use admin //添加分片节点,每个分片都是一个副本集[allowLocal:true仅仅开发时才将分片配置到本地,生产时不能这样] db.runCommand({addshard:& ...
- 【Java接口实现动态加载不同的类】
public interface Person { public double calcuMonthlySalary(double sal, int type); } publi ...
- windows Oracle DBases auto backUp
- OC基础2:一些基本概念
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.字符常量是存放在单引号中的单个字符,字 ...