win7_64上qt5.4.1+opencv2.4.10 +cmake3.2.1环境搭建
参考了以下几篇文章:
[OpenCV] -- win7下配置OpenCV的Qt开发环境 (基本上是按照这篇文章来做的)
win7上qt5.1.1 opencv2.4.7 cmake2.8.12.1环境搭建(关键在环境变量)
Win7下qt5.3.1+opencv2.4.9编译环境的搭建
Win7_64位_Qt5.2_CMake2.8编译OpenCV2.4.6
直接把第一篇文章搬过来的,根据自己的情况添加了一些说明
1 下载所需工具
(1)Qt Creator 下载地址http://qt-project.org
(建议下载最新版本,因为里面带的MinGW版本较高)
(2)OpenCV 下载地址http://opencv.org/
(不建议下载最新版本,最新版本的编译需要高版本的MinGW,不然在执行mingw32-make命令会报错)
(3)CMake 下载地址http://www.cmake.org/cmake/resources/software.html
于2015-3-26下载了以下版本:
qt-opensource-windows-x86-mingw491_opengl-5.4.1.exe
opencv-2.4.10.exe
cmake-3.2.1-win32-x86.exe
2 安装Qt Creator,选择默认,一直下一步就OK
3 安装OpenCV,设置解压路径就OK
4 安装CMake (注意:(1)安装路径不能有中文和空格(2)勾选加入所有境变量中)
5 目前最新的OpenCV版本,安装之后的目录下面有源码和个版本的lib和dll,不过为避免出现问题,还是自己编
译
6 将G:\Qt\Qt5.4.1\5.4\mingw491_32\bin加入系统的Path环境变量(我的Qt Creator安装在G盘)
关于环境变量其实还有一些需要添加,不然编译过程会出现找不到某某文件,需要停下来重新增加环境变量,后面过程有提到这一说明
7 打开CMake,使用CMake编译OpenCV。配置源码路径与生成的目标路径
(1)源码路径:要选择OpenCV安装目录下含有如下文件(data与platforms)的文件夹sources ,在opencv安装目录的第一级目录
即选择目录G:\opencv\sources
(2)目标路径:编译后库文件所存放的目录,可以随意设置,选择了G:\opencv
8 点击Configure配置按钮。在弹出的对话框中选择MinGW makefiles,其余选项保持默认,点击Finish按钮,开始编译
这里有看到选择第二个的指定本地的编译器,会弹出一个对话框,选择了本地QT的bin目录下的gcc与g++编译器。
在参考的第3篇文章中用的就是此方法,我并没与选择此方法。
9 CMake编译结束界面如下图,勾选生成列表中的WITH_OPENGL和WITH_QT两项,其他项最好不要改动
10 再次点击Configure按钮
特别要说明的是:在进行这一步时出现了上图所示错误
Could not find a package configuration file provided by "Qt5Core" with any of the following names:
Qt5CoreConfig.cmake
qt5core-config.cmake
在博客jiebaoabcabc的专栏(http://blog.csdn.net/jiebaoabcabc/article/details/17097765)找到解决方案:
在QT安装目录下查找到了该文件,将其路径添加到环境变量中;其他找不到配置文件的也是采取了相同办法,最后环境变量添加了很多,如下所示:
所添加的环境变量:
G:\CCmake\CMake\bin;G:\Qt\Qt5.4.1\Tools\mingw491_32\bin;
G:\Qt\Qt5.4.1\5.4\mingw491_32\bin;
G:\Qt\Qt5.4.1\Tools\mingw491_32\i686-w64-mingw32\lib;
G:\Qt\Qt5.4.1\5.4\mingw491_32\lib\cmake;G:\Qt\Qt5.4.1\5.4\mingw491_32\lib\cmake\Qt5Concurrent;
G:\Qt\Qt5.4.1\5.4\mingw491_32\lib\cmake\Qt5Core;
G:\Qt\Qt5.4.1\5.4\mingw491_32\lib\cmake\Qt5Gui;
G:\Qt\Qt5.4.1\5.4\mingw491_32\lib\cmake\Qt5Widgets;
G:\Qt\Qt5.4.1\5.4\mingw491_32\lib\cmake\Qt5Test;
G:\Qt\Qt5.4.1\5.4\mingw491_32\lib\cmake\Qt5Concurrent
然后再次点击Configure按钮 ,ok
11 点击Generate按钮,生成makefile文件,成功后,底下会提示Generating done
注意到此时并没有错误出现,有一些红色的警告
12 打开cmd,进入刚才设置的目标路径(G:\OpenCV),输入mingw32-make命令开始编译
命令是cd /d G:/opencv 注意/d不要漏掉
这一步用时很长,我是18:20开始编译,到19:48才结束。我的ThinkPad E40上耗时1h24min
一篇文章建议关掉杀毒软件可能会快些,我并没有关掉。
13 漫长的编译过程完成后,执行命令mingw32-make install,用时2分钟左右
14 下面开始配置Qt Creator的OpenCV开发环境,拷贝下面三个文件夹放在同一个文件夹下
(只需这三个目录, 其余生成的文件和文件夹可以删除,以节省磁盘空间,看了下opencv整个文件夹的大小是5.72G)
所需要的文件夹
1.OpenCV-2.4.10安装目录下的build/include目录
2.CMake目标路径下,MinGW编译后的bin目录
3.CMake目标路径下,MinGW编译后的lib目录
将这3个文件夹拷贝出来放到一起,然后其他的文件都可以删了。
真的可以删除其他文件,不要担心会导致后面编译是否因为删除了这么多文件会出错。
具体的目录截图如下:
(1)OpenCV-2.4.10安装目录下的build/include目录
(2)CMake目标路径下,MinGW编译后的bin目录
(3)CMake目标路径下,MinGW编译后的lib目录
拷贝三个目录到同一目录后的结构如下图(我删除了原来的CMake目标目录中的其他目录,拷贝进来了include目录)这三个文件总大小是93.1M,相比原来5.72G小了很多。
15 将MinGW编译后的bin目录添加到用户PATH环境变量
16 至此Qt Creator下的OpenCV开发环境已经配置好,下面在Qt Creator下测试是否已经配置成功
测试:
打开Qt Creator,新建一个空工程,然后添加一个cpp文件,任意命名,在生成的pro文件中敲入
INCLUDEPATH+=G:\OpenCV\include\opencv\
G:\OpenCV\include\opencv2\
G:\OpenCV\include
LIBS+=G:\OpenCV\lib\libopencv_calib3d2410.dll.a\
G:\OpenCV\lib\libopencv_contrib2410.dll.a\
G:\OpenCV\lib\libopencv_core2410.dll.a\
G:\OpenCV\lib\libopencv_features2d2410.dll.a\
G:\OpenCV\lib\libopencv_flann2410.dll.a\
G:\OpenCV\lib\libopencv_gpu2410.dll.a\
G:\OpenCV\lib\libopencv_highgui2410.dll.a\
G:\OpenCV\lib\libopencv_imgproc2410.dll.a\
G:\OpenCV\lib\libopencv_legacy2410.dll.a\
G:\OpenCV\lib\libopencv_ml2410.dll.a\
G:\OpenCV\lib\libopencv_objdetect2410.dll.a\
简单测试一个显示图片的程序
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main( )
{
Mat image= imread("G:/xeno.jpg");
namedWindow("Test Image");
imshow("Test Image",image);
waitKey();
return 0;
}
运行效果如下
第二次编译2015.4.25
重装了一下系统,再次安装配置编译环境,还是按照之前的步骤一步一步来。
不同的是这次安装cmake,勾选的是只加入当前用户的环境变量并未选所有用户
cmake安装好后可以看到上面第一个的path变量多了一个值G:\CCmake\CMake\bin
如若选所有用户则会在下面一个框中的path变量多一个值G:\CCmake\CMake\bin
(7) .打开CMake,使用CMake编译OpenCV。配置源码路径与生成的目标路径
源码路径:要选择OpenCV安装目录第一级目录的sources文件夹 G:\opencv\sources
目标路径:可以随意设置
(8) 点击Configure配置按钮。在弹出的对话框中选择MinGW makefiles,其余选项保持默认,点击Finish按钮,
开始编译,然后cmake就出错了,显示目录非法,但此目录并没有问题。
解决:重新卸载了cmake再次安装,并勾选加入所有境变量中,并在环境变量中加入了
G:\Qt\Qt5.4.1\Tools\mingw491_32\bin;
G:\Qt\Qt5.4.1\5.4\mingw491_32\bin;
G:\Qt\Qt5.4.1\Tools\mingw491_32\i686-w64-mingw32\lib
之所以加入这三个是在这篇文章(http://blog.csdn.net/jiebaoabcabc/article/details/17097765)看到这个说明:如果报错说是
没找到qt5xxx的就加这个路径加入到环境变量中,而之前的编译确实出现了这个问题:
Could not find a package configuration file provided by "Qt5Core" with any of the following names:
Qt5CoreConfig.cmake
qt5core-config.cmake
当时解决方法在QT安装目录下查找到了这些找不到的文件,将其路径添加到环境变量中;
然后尝试将三个路径加入到环境变量,接下来编译果然不再报错,一切进行的很顺利
(9 )CMake编译结束界面如下图,勾选生成列表中的WITH_OPENGL和WITH_QT两项,其他项最好不要改动
(10 )再次点击Configure按钮,会出现如下画面,最前面有一些红色的项目,不管它,继续。
(11 )点击Generate按钮,生成makefile文件,成功后,底下会提示Generating done
此时任然有红色警告。 仍然不管。
这时如果去看看opencv文件夹的内容会发现多出了很多东西:原来只有两个文件夹build和sources
(12 )打开cmd,进入刚才设置的目标路径(G:\OpenCV),输入mingw32-make命令开始编译
命令是cd /d G:/opencv 注意/d不要漏掉
然后会出现如下界面:
cd /d G:/opencv
mingw32-make
这一次我是21:15开始编译,到22:11结束。我的ThinkPad E40上耗时一个小时,比上次少了大概半个小时。
(13) 漫长的编译过程完成后,执行命令mingw32-make install,用时2分钟左右
(14) 下面开始配置Qt Creator的OpenCV开发环境,拷贝下面三个文件夹放在同一个文件夹下(只需这三个目录, 其余生成的文件和文件夹可以删除,以节省磁盘空间,看了下opencv整个文件夹的大小是5.72G)
所需要的文件夹 1.OpenCV-2.4.10安装目录下的build/include目录
2.CMake目标路径下,MinGW编译后的bin目录
3.CMake目标路径下,MinGW编译后的lib目录
将这3个文件夹拷贝出来放到一起,然后其他的文件都可以删了。
将原来的opencv文件夹改名为opencv10(这样删除比较方便),然后新建一个opencv文件夹,并拷贝三个选定的目录文件到新建的opencv文件夹中。 然后将几个G大小的opencv10文件夹删除掉,只留下了一个大小只有92.7MB的文件夹opencv
(15) 将MinGW编译后的bin目录添加到用户PATH环境变量 G:\opencv\bin
(16) 至此Qt Creator下的OpenCV开发环境已经配置好,下面在Qt Creator下测试是否已经配置成功
(17) 打开Qt Creator,新建一个空工程,然后添加一个cpp文件,任意命名,在生成的pro文件中敲入
INCLUDEPATH+=G:\OpenCV\include\opencv\
G:\OpenCV\include\opencv2\
G:\OpenCV\include
LIBS+=G:\OpenCV\lib\libopencv_calib3d2410.dll.a\
G:\OpenCV\lib\libopencv_contrib2410.dll.a\
G:\OpenCV\lib\libopencv_core2410.dll.a\
G:\OpenCV\lib\libopencv_features2d2410.dll.a\
G:\OpenCV\lib\libopencv_flann2410.dll.a\
G:\OpenCV\lib\libopencv_gpu2410.dll.a\
G:\OpenCV\lib\libopencv_highgui2410.dll.a\
G:\OpenCV\lib\libopencv_imgproc2410.dll.a\
G:\OpenCV\lib\libopencv_legacy2410.dll.a\
G:\OpenCV\lib\libopencv_ml2410.dll.a\
G:\OpenCV\lib\libopencv_objdetect2410.dll.a\
G:\OpenCV\lib\libopencv_video2410.dll.a
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
void mycanny(cv::Mat& img, cv::Mat& out)
{
if(img.channels()==3)
cvtColor(img,out,CV_BGR2GRAY);
Canny(out,out,80,100);
threshold(out,out,128,255,cv::THRESH_BINARY_INV);
}
int main()
{
VideoCapture capture(0);
VideoWriter writerorigin("VideoTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480),1);
VideoWriter writer("VideoCannyTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480),0);
Mat frame;
while (1)
{
capture >> frame;
if(!capture.read(frame)) // 读取下一帧图像
break;
writerorigin << frame;
imshow("origin_video", frame);
Mat result;
mycanny(frame,result);
imshow("Canny Video",result);
writer << result;
if (cvWaitKey(1) == 27) // 按下Esc退出程序
break;
}
return 0;
}
测试效果图如下: