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

时间: 2024-12-23 23:13:52

Qt中添加OpenCV库的相关文章

【转】QT中添加 动态库(.so) 和 静态库 (.a) 的方法

http://blog.csdn.net/yzj19870824/article/details/6933737 在QT 的Makefile文件中: 1 添加动态库,如lipcap.so 则,在LIBS一行中添加“-L/usr/local/lib -lpcap”,依据自己的情况修改libpcap.so的路径 2 添加静态库,如libtinyxml.a 则,在LIBS一行添加“/home/yzj/tinyxml/libtinyxml.a”: 在INCPATH一行添加“ -I /home/yzj/t

Qt中调用PolarSSL库(一)

最近一直在学习SSL相关的知识,也是先了解理论相关的知识,主要是SSL相关的基本概念和连接建立过程,主要是基于PolarSSL开源库进行学习.学习完了之后就希望能给有所运用,就想用Qt写一个简单的程序,增加对SSL相关概念的把握和对PolarSSL库的运用.当然,最终希望是可以使用Qt做一个比较完善的工具,帮助大家更好的理解和学习SSL相关知识.这都是后话,在第一篇里面,我们就简单用例子展示如何在Qt里面调用PolarSSL库. 这篇博客主要是讲解Qt里面调用PolarSSL库,至于SSL相关概

iOS——Xcode中添加第三方库

一.只有.h和.a文件的库 1.向项目中添加三方库文件 如果添加的第三方库只有.h和.a文件,直接把文件夹拖进项目下面,这时会弹出下面的提示框,一定要勾选下面选择的选项: 这里要注意,在Add to targets里面一定要选择上要将库文件(.a文件)添加到的目标,这是告诉项目哪些目标需要包含.a文件,不然的话项目目标里将不会包含.a文件:这个时候,进入“工程->添加了第三方库的项目目标(TARGETS里面)->Build Phases->Link Binary With Librari

Qt中添加背景图片的方法

Qt中添加背景图片的方法 1. QPalette的方法 #include <QApplication>#include <QtGui> int main(int argc, char *argv[]){    QApplication app(argc,argv);        QFrame *frame = new QFrame;    frame->resize(400,700);    QPixmap pixmap("images/frame.png&quo

VS2010中添加lib库引用

一.VS2010中添加lib库引用:1 菜单  项目---> 属性--->配置属性-->链接器---->输入---附加依赖项,  加入库名,如: my_API.lib; 或是在cpp源文件中用代码#pragma comment(lib,"my_API.lib")代替. 此时再编译会提示错误:fatal error LNK1104: 无法打开文件"my_API.lib" ,  原因应该是编译器不知道去哪里找我们的这个库,下面就来解决2 然后给项

Qt中配置OpenCV环境

在Qt中开发基于OpenCV的应用时,需要配置对应函数库到环境变量,这时候我们需要使用到qmake能够识别的变量来指定环境变量. INCLUDEPATH: 用于指定搜索头文件到文件夹路径. LIBS: 包含链接时的库文件列表.使用-L来指定文件夹路径,-l来指定库的名称. 而这些配置,我们需要写入到对应到工程文件(*.pro)当中,可以有两种写法. 第一种:直接指定包含到库文件名称. 1 INCLUDEPATH += /usr/local/include/opencv2/ 2 3 LIBS +=

[转] Matlab与C++混合编程,添加OpenCV库

原文地址 峰回璐转 最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍 受.软件立刻移植到C++上又不太实际,故采用联合编程的方式,速度难以容忍的算法交给C++实现,C++在实现代码的过程中某些数值计算及图像处理算法 调opencv库函数. 在网上有很多matlab编写mex函数调用opencv库的方法,但都不能直接拿来.经过一步步试验,修改,最终完成,现将过程及内容记录下来留给后来人参考. 第一步: (参考参考

Matlab与C++混合编程,添加OpenCV库

最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍受.软件立刻移植到C++上又不太实际,故采用联合编程的方式,速度难以容忍的算法交给C++实现,C++在实现代码的过程中某些数值计算及图像处理算法调opencv库函数. 在网上有很多matlab编写mex函数调用opencv库的方法,但都不能直接拿来.经过一步步试验,修改,最终完成,现将过程及内容记录下来留给后来人参考. 第一步: (参考参考资料1,但其写的不够详细

向modesim中添加alter库 (或者在每次仿真时将库文件加入仿真文件夹一起编译)

在ModelSim中进行仿真需要加入Quartus提供的仿真库,原因是下面三个方面:    ·Quartus不支持Testbench:    ·调用了megafunction或者lpm库之类的Altera的函数:    ·时序仿真要在Modelsim下做仿真.    下面以Altera器件为例,介绍如何在ModelSim中加入Altera的仿真库,Quartus II软件中自带有Altera的仿真库,只要把它拿到ModelSim中去编译一下就可以了,具体步骤如下:1.设置仿真库路径    打开M