早先用的opencv的版本是2.3.1的,后来需要用到高版本的一些函数,无奈只能下载一个2.4.8的版本,发现官方的2.4.8版本是没有MingW编译好的库的,如此折腾了几次,也没弄好,只能使用原来的老版本,但是天不遂人愿,最近需要用到Qt5,原来的qt 4.8下编译的opencv也不能用了,只能痛下决心自己编译源码了。
事实上第一次编译源码的问题确实很多,首先说下平台,win7 32bit,使用的是QT5.0.1+QtCreator2.6.2,貌似大家用这个版本的人很少,我也不知道从哪里下了这个版本就用了,opencv是2.4.8,源码官网上很多。
需要下载的东西:
1:CMake 2.8.7
2:Qt5.0.1-MinGW4.7
3:opencv2.4.8
然后开始编译吧:
1:打开cmake,选择编译的源文件路径和构建路径:
2:点击configure,
出现一些红色的没有值的部分,可以忽略,记得勾选WITH_OPENGL,网上很多说要勾选WITH_QT,我觉得其实没必要,如果勾选WITH_QT,打开摄像头会初始化窗口会慢很多,虽然多了一些小功能,但是在实际中如果开发QT GUI界面的话,在函数中随便imshow的话,是不会显示图像的,所以,没必要勾选WITH_QT。再次点击configure,红色消失.
点击generate.
4:在所有程序中的QT下找到Qt 5.0.1 for Desktop (MinGW 4.7)
5:点击之后进入命令行,并进入你开始选择的构建目录,输入mingw32-make,进行编译,结束后输入mingw32-make install.
若提示找不到mingw32-make,请将QT5文件夹下的bin目录加到系统path中,关闭命令行,重新打开输入。
6:编译好之后,我们发现构建目录下多了很多东西,找到install文件夹,我的里面只有X64一个文件夹,很奇怪,不过照样可以用,把里面的bin和lib文件夹复制出来,和include文件夹放在一起,这三个文件夹就是我们以后要用的,可以把这三个放到一个没有中文路径和空格的地方,为了以后好移植, 我们新建一个环境变量OPENCV248_MINGW
,值是这三个文件夹所在目录的路径。然后bin的路径加到系统path中,并复制bin中dll到C:windows\system32下。
7:使用:
在项目文件.pro中加入
INCLUDEPATH +=$(OPENCV248_MINGW)\include
LIBS +=$(OPENCV248_MINGW)\lib\libopencv_calib3d248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_contrib248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_core248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_features2d248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_flann248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_gpu248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_highgui248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_imgproc248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_legacy248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_ml248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_nonfree248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_objdetect248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_ocl248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_photo248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_stitching248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_superres248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_ts248.a \
$(OPENCV248_MINGW)\lib\libopencv_video248.dll.a \
$(OPENCV248_MINGW)\lib\libopencv_videostab248.dll.a即可以使用。
记得使用using namespace cv;