咱家在前文:OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例 介绍了OpenCV的OpenCV4Android版本的开发和使用,并附了用Java接口调用OpenCV在Android开发示例。
前文:OpenCV4Android开发之旅(二)----Eclipse调用OpenCV2.4.4的Java接口配置及示例 介绍了OpenCV2.4.4的windows版本里,利用Java接口调用OpenCV编写纯Java程序的方法和示例。注意第一篇和第二篇的区别请参考上面这两篇文章。
有了这两种方法,可以方便在Android中开发利用OpenCV的应用。利用第二篇可以用Java语言快速验证算法。但对大多数而言,我想大家还是喜欢利用C++接口来写算法。为此我写了OpenCV2.0在windows平台的使用,配置比较简单,参见这里。但毕竟OpenCV2.0相比与2.4之后的版本,功能还是显得单薄,尤其是人脸识别算法方面。本文就介绍如何在Eclipse上利用C++接口调用Windows平台的OpenCV2.4.4的过程。首先交代一句,在OpenCV2.4.4解压后,build/x86/文件下有mingw、vc9、vc10、vc11四个windows平台针对不同编译器编译好的OpenCV版本。但遗憾的是编译好的mingw不能使用,我啥都配置好后,点击run发现啥提示都没有。不得已只好自己重编。下面记录编译过程:
1、下载安装MinGW 参考这里 点击http://tdm-gcc.tdragon.net/download 下载tdm-gcc,安装时选择默认的支持C++/C的那种方式即可,默认会自动添加到系统环境变量。如果没有添加则手动添加:C:\TDM-GCC-32\bin; 安装完毕后打开cmd.exe,输入gcc --version测试版本.
2、下载CMake http://www.cmake.org 安装。记得勾选添加环境变量,创建桌面快捷图标:
3、将下载的OpenCV-2.4.4解压或安装到目录:D:\ProgramFile\opencv
4、打开CMake安装后生成的cmake-gui,在source code里选择路径D:/ProgramFile/opencv, 在where is build binaries选择路径:D:/ProgramFile/opencv/build/x86/mymingw 注意,我们这里在x86目录下新建了一个mywingw文件夹用来放自己编译的库。然后点击configure,看到会有红色,再次点击configure,接着点generate。如果一切正常的话在D:/ProgramFile/opencv/build/x86/mymingw 这个文件夹下就会生成编译需要的makefile文件。注意:如果PATH变量配置的有cygwin的bin文件夹路径的话,configure时会报错,两者会冲突,一定要先把cygwin的系统变量删除掉。
5、打开cmd,进到D:/ProgramFile/opencv/build/x86/mymingw这个目录,然后输入:mingw32-make,如果这个命令找不到的话请查看PATH系统变量里有没有C:\TDM-GCC-32\bin。
6、上一步正常的话就可以看到正在编译,左边会有进度显示。这个过程会持续半个小时左右,编译完后看到如下图:
这个时候OpenCV2.4.4的库已经编译好了,下面只需要三步配置就能够正常调用了。注意,如果你前面装了Cygwin,那么如果你用相同的工作空间,cygwin配置的环境变量:C_INCLUDE_PATH CPLUS_INCLUDE_PATH会干扰你使用MinGW编译器。所以,最好重新建一个工作空间,并且重新建一个新的C++项目,然后按下面的配置三步就可以用OpenCV。记住一定是新的C++项目,如果你用以前的C++项目配过OpenCV自带的mingw库但没成功,此刻编译好后无论你怎么配还是测试不通过。
7、在PATH系统变量里将路径:D:\ProgramFile\opencv\build\x86\mymingw\bin 添加进去,这个目录下都是dll。设置完毕后保险起见,最好重启下电脑。然后再开Eclipse。如果Eclipse已经开着,最起码也要重启下。
8、新建一个工作空间Eclipse_MinGW_C,然后新建一个C++项目,选择MinGW做编译器。
9、左键选中项目,然后按alt+enter快捷键,选择C/C++ Build-------------Settings-----------Tool Settings,在GCC C++ Compiler的includes选项里添加目录:D:\ProgramFile\opencv\build\include (这个目录是opencv解压缩后默认的,跟编译无关)
10、在MinGW C++ Linker选项里的Libraries里,在Libraries(-l)里依次添加如下库:
opencv_calib3d244
opencv_contrib244
opencv_core244
opencv_features2d244
opencv_flann244
opencv_gpu244
opencv_highgui244
opencv_imgproc244
opencv_legacy244
opencv_ml244
opencv_nonfree244
opencv_objdetect244
opencv_photo244
opencv_stitching244
opencv_ts244
opencv_video244
opencv_videostab244
这些库是按照OpenCV2.4.4自带的MinGW文件夹下所包含的库,可以看到我们自己编译的库要多于上面。实际上添加上面这些库一般就够用了。其中比较常用的是opencv_highgui244、opencv_imgproc244、opencv_core244,这三个也是最基本的。
在Library search path(-L)里将路径:D:\ProgramFile\opencv\build\x86\mymingw\lib 添加进去,这个路径下都是.a静态库。
如下图:
11、通过下面的代码进行测试:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { cout<<"000000000"<<endl; Mat img = imread("F:\\kunlong.jpg", CV_LOAD_IMAGE_COLOR); int w = img.cols; //宽度 int h = img.rows; //高度 Size s = Size(w, h); Mat grayImg = Mat(s, CV_8UC1); cvtColor(img, grayImg, COLOR_RGB2GRAY); namedWindow("Image", CV_WINDOW_AUTOSIZE); imshow("Image", img); namedWindow("Gray", CV_WINDOW_AUTOSIZE); imshow("Gray", grayImg); waitKey(0); cout<<"11111111"<<endl; return 0; }
记得将kunlong.jpg放到F盘下。测试结果如下:
另外,关于这个头文件包含的问题,经过测试采用上述代码完全没有问题,如果对包含头文件有疑问可以参考这里:http://blog.csdn.net/moc062066/article/details/6671481
截止到这里,OpenCV4Android的使用、OpenCV2.4.4 for windows 的java接口调用、OpenCV2.4.4 for windows的C++、C接口(通过MinGW编译器)都交代清楚,所用到的开发IDE都是Eclipse,够强大吧。还有几分钟2014就要到来了,在2013年的最后一天祝福大家新的一年里注意身体健康,多多代码的同时坚持锻炼,祝大家万事如意、心想事成,新的一年进步多多!
如果您觉的我在认真写博客,CSDN2013博客之星评选,请为我投上一票,谢谢您的鼓励,咋家一定再接再励!
投票链接:http://vote.blog.csdn.net/blogstaritem/blogstar2013/yanzi1225627
-------本文系原创,转载请注明作者yanzi1225627,欢迎大家加入OpenCV4Android开发联盟群:66320324,备注yanzi
参考:链接1