一、准备工作:
1)Java环境:jdk-8u77-windows-i586(用32位的,因为我们要用32位的eclipse)
下载链接:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2)Eclipse:Eclipse IDE for C/C++ Developers(一个用于c/c++开发的eclipse,这个要下载32位,因为我们的qt插件好像是只有对于32位的eclipse才起作用)
下载链接:
http://www.eclipse.org/downloads/
3)Qt:qt-win-opensource-4.8.4-mingw(一定是mingw版本的,因为我们用的是mingw编译器)
下载链接:
http://download.qt.io/archive/qt/4.8/4.8.4/
4)qt-eclipse插件:qt-eclipse-integration-win32-1.6.1(这个插件是32位的,所以对于32位的eclipse才有作用)
下载链接:
http://www.softpedia.com/get/Programming/Other-Programming-Files/Qt-Eclipse-Integration.shtml
5)opencv:opencv-2.4.9.exe (这个是我用的opencv的版本)
下载链接:
http://opencv.org/downloads.html
6)MingW:我用的是4.4.0版本的gcc,我自己整合好了,我觉得国内网络不稳定,在线安装的那个可能安装不全,直接复制到c盘然后配置一下环境就可以用了。
下载链接:
http://pan.baidu.com/s/1i4IImCt
7)cmake:用来编译opencv的,我们下的windows版本的opencv只有vs能用,我们要用mingw来对其重新编译。
下载链接:
当这些东西都准备好了之后,我们可以先着手做事了。
(Java的安装和配置环境就不说了)
二、配置Mingw:
1)解压mingw,并配置环境,这个我们一定要解压在c盘,只有在c盘我们的qt才能安装成功,反正mingw也不是很大。
2)配置mingw的环境。
A、新建一个C_INCLUDE_PATH = C:\MinGW\include的环境变量;
B、LIBRARY_PATH = C:\MinGW\lib 的环境变量;
C、CPLUS_INCLUDE_PATH =
C:\MinGW\lib\gcc\mingw32\4.4.0\include;C:\MinGW\lib\gcc\mingw32\4.4.0\include-fixed;C:\MinGW\lib\gcc\mingw32\4.4.0\include\c++;C:\MinGW\lib\gcc\mingw32\4.4.0\include\c++\backward;C:\MinGW\lib\gcc\mingw32\4.4.0\include\c++\mingw32 的环境变量;
D、我们还要在path环境变量里面添加一条C:\MinGW\bin;的环境变量。
配好环境后,我们可以看看是否配置好了,打开cmd,输入g++ -v和gcc -v看看:
这样证明我们配置成功了。
三、解压eclipse,我们来测试一下我们的eclipse能否编译并运行c/c++程序。
我们新建一个c++工程,选择MinGW GCC的Toolchains:
能编译运行,证明我们的写基本c/c++的程序的环境已经配置好了。
四、安装qt
我们直接双击qt-win-opensource-4.8.4-mingw.exe,然后这个安装没什么好说的,我们只要选好mingw的安装位置就可以了,一路next过来,选择安装位置:
选择mingw的安装路径:
静静地等待他安装好了就可以了。
然后我们配置一下qt的环境变量,即我们还要在path环境变量里面添加一条D:\Qt\4.8.4\bin的环境变量。
五、安装qt-eclipse插件。
我们先直接双击qt-eclipse-integration-win32-1.6.1.exe,一路next过了,我们先选择安装路径,这个随便,我这里选择了安装在D盘。
这个eclipse的安装根目录和mingw的bin目录一定要选好。
然后我们就开始install。
六、启动eclipse,检验qt插件是否安装成功和qt是否能使用,及其在elipse里面配置qt。
1)安装了这个插件之后,我们就在开始菜单哪里找到Start Eclipse with MinGW(ps这是个批处理文件),我们点击这个Start Eclipse with MinGW启动eclipse,这时我们会发现一个问题:
无法找到虚拟机,虽然我们已经在java配置的时候把环境配好了,可是通过批处理文件却也是没有按照我们配好的环境来寻找虚拟机的路径。所以我们要在这个批处理文件里面手动设置。
我们找到qt-eclipse-integration-win32-1.6.1的安装目录,以记事本的形式(也可以用notepad打开,这里我用notepad)打开start.bat,如下图一样添加我们的javaw.exe路径
即(D:\\Program Files (x86)\Java\jdk1.8.0_77\jre\bin):
保存好关闭,就可以了。
2)接下来我们开始在eclipse里面配置qt的bin目录和include目录。
我们打开window->preferences
选择qt,然后我们点击add
设置qt的version,配置好qt的bin目录和include目录。
3)接下来我们建立一个qt工程来检验一下我们的qt是否能使用,我们创建个qt gui的工程,我们点击file,选择new,再选择other:
之后按照提示,输入工程名,一路next过来就可以了。呃,,,搞到这里,我们试这个build这个工程,会发现:program “make” not found in PATH的错误,这个很好解决,我们找到mingw的bin目录,把mingw32-make.exe改成make.exe就好了。
我们build了之后,就run一下看看:
这样我们在eclipse下使用qt已经没有问题了。
七、cmake+mingw编译opencv,因为opencv安装挺简单的,我这里就不说了,这相当于一个解压缩的过程。
1)Cmake的安装:
我们选择add cmake to the system path for all users 安装cmake,这样我们就不用配置cmake的环境变量了。之后选择自己想要安装的目录安装即可。
3)编译opencv,我们先在opencv安装目录的build目录下x86文件夹里面新建一个名为mingw的文件夹,之后我们启动cmake。
我们选择add cmake to the system path for all users 安装cmake,这样我们就不用配置cmake的环境变量了。之后选择自己想要安装的目录安装即可。
3)编译opencv,我们先在opencv安装目录的build目录下x86文件夹里面新建一个名为mingw的文件夹,之后我们启动cmake。
4)
第一个红框框选择opencv的source文件夹,即opencv的源码文件夹,第二个红框框选择我们刚刚新建的那个MingW文件夹,之后我们点击configure。
我们选择MinGW Makefiles和圈use default ...,之后finish,之后等待其configure完毕,之后我们查看其configure的结果,找到with_qt,勾住它:
之后我们继续configure,知道没有红色的警告为止:
然后generate。
最后,我们在cmd里面到达我们的那个新建立的mingw文件夹:
输入mingw32-make:
就这样静静地等待它编译完成,可能差不多一个小时。然后我们把这个路径:
D:\Program Files (x86)\opencv\build\x86\MingW\bin添加到path环境变量中去,编译出来的东西都在MingW里面,bin子文件夹是一个动态链接库。
八、在eclipse里面配置opencv的工程。
1)这里我们还没有用到qt,我们先新建一个c++工程:
再添加个源文件main.cpp: 2)现在还不能运行opencv代码,我们先对着opencvtest工程点击右键,再点properties:
按照图所示,我们找到了include paths(-l),我们添加头文件路径,添加完之后,我们不要急着点击ok:
添加完头文件,我们接下来是添加lib文件及其路径:
3)也是如图所示,我们看到了libraries(-l)和library search path(-l),第一个是添加lib库的文件名,第二个添加lib库的路径。
我们添加如下的lib库(也可以不完全加进来,用到什么就加什么也可以):
libopencv_calib3d249
libopencv_contrib249
libopencv_features2d249
libopencv_flann249
libopencv_gpu249
libopencv_imgproc249
libopencv_legacy249
libopencv_ml249
libopencv_core249
libopencv_highgui249
libopencv_nonfree249
libopencv_objdetect249
libopencv_ocl249
libopencv_photo249
libopencv_stitching249
libopencv_superres249
libopencv_video249
libopencv_videostab249
除了添加lib库文件名,我们还有把路径也添加进来,我们的路径是:
D:\Program Files (x86)\opencv\build\x86\MingW\lib
弄好之后,就是这样子,最后我们点ok。
4)之后我们添加如下代码:
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main( int argc, char** argv )
{
Mat image;
image = imread("D:/opencv_img_avi/news.jpg", 1 );
if(!image.data )
{
printf( "No image data \n" );
return -1;
}
namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
imshow( "Display Image", image );
waitKey(0);
return 0;
}
编译运行,我们会发现,eclipse没有给我们弹出opencv显示图片的框框,console也是一闪而过,这个bug我还没解决(ps:这个现在暂时还没找到方法,所以调试程序可能会有点麻烦),我们可以直接手动运行我们的二进制文件。
这就是我们之间找到那个opencvtest.exe可执行文件直接运行的结果。
九、opencv和qt的结合(这里我仅仅是测试qt下写opencv代码,所以我是直接贴代码都opencv工程里面的,实际应用中,我们的qt和opencv是紧密结合在一起用的)
1)我们先新建一个qt的gui项目,建好后,对着项目右键,然后点击properties:
按照上图所示,我们找到了这个工程所包含的include的目录,我们发现,它没有包含opencv的include,也没有包含gcc的include,所以我们要把他们添加进来,点击add external include path,添加后结果就如下图所示(这时候,也别急着点击ok,下一步还有东西要加):
当然,这样还不行,我们还要把opencv的库文件也加进来。
所以要换个选项框,找到libraries,我们点击add external library...,找到D:\Program Files (x86)\opencv\build\x86\MingW\lib目录,按添加相应的文件,注意后缀是“.dll.a”:
现在我们可以点ok了。
2)光在properties里面设置路径和头文件还不行,我们还要在qt的.pro文件里面添加如下代码,即头文件和库:
INCLUDEPATH+=$$quote(D:/Program Files (x86)/opencv/build/include) \
$$quote(D:/Program Files (x86)/opencv/build/include/opencv) \
$$quote(D:/Program Files (x86)/opencv/build/include/opencv2)
LIBS+=$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_calib3d249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_contrib249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_core249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_features2d249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_flann249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_gpu249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_highgui249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_imgproc249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_legacy249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_ml249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_objdetect249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_video249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_photo249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_videostab249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_stitching249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_superres249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_ocl249.dll.a) \
$$quote(D:/Program Files (x86)/opencv/build/x86/MingW/lib/libopencv_nonfree249.dll.a)
由于在qt的.pro文件里面,路径不能有空格,如果有的话,我们就用这个$$quote()函数把路径给转化一下。
3)出现的问题及其解决办法。
接下来回到我们的代码,如下图,如果发现method setupUi could not be resolved的错误。
可以按照我这样,对着我们的工程点击右键,再点properties,找到如下图的这个indexer,按照我这个图勾上哪些该勾的地方就可以了。
4)好了,我们在main.cpp里面添加我们的opencv的代码,这个代码我仅作测试用,是强行加进去的:
加到main.cpp里面
/*main.cpp*/
#include "opencv_qt.h"
#include <QCoreApplication>
#include <QtGui>
#include <QApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
opencv_qt w;
w.show();
Mat image;
image = imread("D:/opencv_img_avi/news.jpg", 1);
if (!image.data) {
return -1;
}
namedWindow("Display Image", CV_WINDOW_AUTOSIZE);
imshow("Display Image", image);
return a.exec();
}
我们可以编译整个代码了,同样,这里有opencv的代码,所以我们的eclipse还是不能直接运行这个程序,我们还是要到这个工程的debug文件夹下直接运行我们的.exe文件。
就这样,我们在eclipse下把qt和opencv和结合在一起用了,具体怎么设计看自己了。