在Qt中使用OpenCV我遇到的问题有:
1、CMaka版本太高(第一次使用的是3.1)导致在cmd中执行mingw32-make时在50%时出错,换了现在的Cmake2.8.12就ok了(具体换成哪个版本及是否是版本问题,我是尝试后偶然解决的);
2、QT最好使用自带有MinGW和QtCreator,即在官网下载相应的全套安装包;单个下载也可以,但是可能不同版本之间会出现一些错误;
3、读入图片
pImg=cvLoadImage("C:/2.jpg",CV_LOAD_IMAGE_COLOR);
image=imread("C:/2.jpg");
要是用‘ / ’ 而不是 windows中的‘ \ ' ;
害得我重装了一次
所以步骤具体如下:
一、安装Qt
注意两点:
1、记得勾选MinGW这个选项;
2、是记得安装后把类似于
“C:\Qt\Qt5.2.1\5.2.1\mingw48_32\bin”
“C:\Qt\Qt5.2.1\Tools\mingw48_32\bin”
“C:\Qt\Qt5.2.1\Tools\mingw48_32\i686-w64-mingw32\lib”
的三个路径添加到环境变量中(其实不用全部包含,具体哪个不用包含我没有测试)。
其他的过程都一路next就可以了。
二、安装CMake
注意两点:
1、安装路径不能有中文和空格;
2、安装时勾选上:添加CMake到环境变量中给所有用户
三、解压OpenCV
解压后大致如下:不同版本解压的文件目录有差异
四、使用CMake编译OpenCV
打开CMake-gui.exe
源路径Source code:填写opencv解压得到的目标路径
Build the binaries:填写你要把编译后的东西放到的地方(随意找个合适的地方)例如C:\OpenCV
点击configure,选MinGW Makefile,选第一项“use default native compilers”,表示选择默认的编译器
Finish后CMake首先监测一些参数,正常应出现一大片红色,但这个地方可能有error,容易出现的问题是提示各种找不到环境变量,回看“一安装qt”部分内容。
如果顺利则勾上WITH_QT和WITH_OPENGL,看自己的需要了。再次点击configure,可能提示找不到qt5xxx或找不到lib的,这时环境变量是否添加了,如果没添请
填上,请注意:填上后重新启动CMake!。
有个关于QT_QMAKE项,看是否是NOT FOUND的,若果是,在Qt5安装目录下找到qmake.exe把路径复制到NOT FOUND处,然后修改“\”为“/”!直接复制的不符合规格,例如应
该是:“C:/Qt/Qt5.3.2/5.3/mingw482_32/binqmake.exe”
五、编译OpenCV
进入cmd,进入刚才CMake时设置的目标路径,输入mingw32-make命令开始编译
我的超极本电脑编译大概30分钟左右,具体多少看你电脑性能了
编译完成后执行:mingw32-make install
几分钟就ok
六、整合
编译工作已经完成。只需要三个文件夹: 1) 原始的opencv解压文件后的build/include 2) 编译后目标路径中的bin 3) 编译后目标路径中的lib 其他的都可以删去。
把上述说那个文件放到同一个文件夹中,再放到合适的位置例如“C:\qt_opencv_used\(三个文件夹)”;
我测试了一下把OpenCV编译目录中的lib、bin、include三个拷贝出来也能用,但是对比了一下好像还是缺少一些文件
把上述bin添加到环境变量中,添加错误或不添加会出现编写程序查不出任何错误,也不会有任何报错,只要一运行就会“程序异常停止运行”。这样,环境就算配置好了。
七、测试
打开Qt Creator,新建一个空工程,然后添加一个cpp文件
在pro文件中添加如下OpenCV的依赖文件
<span style="color:#800080;">INCLUDEPATH</span>+=C:\qt_opencv_used\<span style="color:#808000;">include</span>\opencv<span style="color:#c0c0c0;"> </span>\<pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">C:\qt_opencv_used\<span style="color:#808000;">include</span>\opencv2<span style="color:#c0c0c0;"> </span>\
C:\qt_opencv_used\include
LIBS+=C:\qt_opencv_used\lib\libopencv_calib3d231.dll.a \
C:\qt_opencv_used\lib\libopencv_contrib231.dll.a \
C:\qt_opencv_used\lib\libopencv_core231.dll.a \
C:\qt_opencv_used\lib\libopencv_features2d231.dll.a\
C:\qt_opencv_used\lib\libopencv_flann231.dll.a\
C:\qt_opencv_used\lib\libopencv_gpu231.dll.a\
C:\qt_opencv_used\lib\libopencv_highgui231.dll.a\
C:\qt_opencv_used\lib\libopencv_imgproc231.dll.a\
C:\qt_opencv_used\lib\libopencv_legacy231.dll.a\
C:\qt_opencv_used\lib\libopencv_ml231.dll.a\
C:\qt_opencv_used\lib\libopencv_objdetect231.dll.a\
C:\qt_opencv_used\lib\libopencv_video231.dll.a
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
using namespace cv;
#if 1
int main() {
//声明IplImage指针
IplImage* pImg;
//载入图片
pImg=cvLoadImage("C:/2.jpg",CV_LOAD_IMAGE_COLOR); //C:\2.jpg 要使用'/' 而不是windows的 '\'
if(NULL==pImg)
{
printf("image can't read!\n");
}
// Mat image(pImg); //有这句话,为什么会出错
//创建窗口
cvNamedWindow("Image",CV_WINDOW_AUTOSIZE); // 注释掉这句话,程序尼玛也运行
//显示图像
cvShowImage("Image",pImg);
//等待按键
cvWaitKey(0);
//销毁窗口
cvDestroyWindow("Image");
//释放图像
cvReleaseImage(&pImg);
return 0;
}
#else
int main()
{
Mat image;
image=imread("C:/2.jpg");
imshow("li",image);
waitKey();
return 0;
}
#endif
结果: