如何将opencv的C++源程序opencv2.4.9移植到armndroid 平台上

OpenCV学习笔记(四)—— 移植到Android平台
如今,大部分的AR都是基于移动设备的,所以这里我们尝试在中调用OpenCV的功能来做一些相关的测试。由于OpenCV是基于C语言和部分C++语言开发的,而Android开发使用的则是,那么如何才能在Java中调用OpenCV库中的类或者代码呢?这就需要借助于JNI了,不过在使用JNI之前,我们首先要先配置好开发环境。
一、工具:
1.Eclipse:包含JDK、SDK、IDE、CDT、NDK和ADT插件,也就是在android软件开发环境配置完成之后再加上NDK和CDT插件,在这里我只简单说一下NDK的配置过程:
下载NDK安装包,这里我是在云盘下载的,因为官方链接非常不稳定,我使用的是ndk-r9的版本:
解压压缩包到指定目录下面,然后打开eclipse编辑器,工具栏中Window&&Preferences:
注意NDK的路径不能包含空格!!!
2.OpenCV for Android插件包:到OpenCV的官方网站()下载android专用版的OpenCV资源包
下载之后得到压缩包:,加压压缩包并得到SDK文件:
这些目录分别存放的文件:
apk:使用了opencv库的android程序管理包,这个需要按照你手机的实际芯片情况来选择相应版本手工安装,除非你可以连接上google play自动安装;
samples:一些简单的案例apk及其工程
sdk:最为关键的目录,包含OpenCV android开发用到的API和库文件。
二、安装配置:
1.将OpenCV库导入Eclipse中:Eclipse中选择工具栏中的:File &&Import...,然后选择General&&Existing Projects into Workspace:
选择刚刚解压出来的OpenCV SDK的根目录,然后导入其中的一个工程:
导入的过程中Eclipse就会对导入的项目进行编译,导入成功之后发现一片飘红,那么接下来我们就开始慢慢解决这些错误指导能够成功编译为止。
2.OpenCV Library -3.1.0是其他所有demo的依赖库文件,所以我们优先解决它的问题然后再导入demo进行测试。从错误列表中我们可以看出大部分的错误都是&XXX cannot be revoled to a type&,这个错误其实就是引用了一些未定义的类,考虑到我们还未引入其他第三方的类库,所以导致这个问题的原因只可能是引用android内部类库所引起的,那么显而易见的可以定位到应该是android API版本不匹配的问题。
选中工程,右键选择Properties(属性),打开属性页面:
选择Android页签,在此处切换工程依赖的Android API版本,进过查询可以定位缺少的API是Android 5.0中新增的,所以我们只要选择5.0或者5.0以上的API版本,即可解决问题:
3.解决完上述问题之后,我们可以用相同的办法导入一个demo工程,这里我们也可以将全部demo工程一并导入到Eclipse中:
又红了是不是?不要慌,查看错误列表发现错误都是引用未定义类导致的,这其实是因为每个demo都会引用OpenCV Library -3.1.0库文件,但是此时库文件的路径发生了变化,所以才出现了无法正常引入库文件导致的错误,解决方法很简单,只需要为每个工程重新定位库文件路径到当前库文件路径即可:
删除无效的引用,点击Add重新添加库工程引用:
4.对所有的demo工程进行上述设置之后,发现错误栏的错误剩下两个:
这个错误导致的原因是编译的时候无法找到ndk工具,此时我们需要在属性面板中修改C/C++ Build的一些配置信息,取消使用默认的command:
展开目录选中Environment选项,在其中Add多一个路径参数NDKROOT,参数值为NDK的根路径:
5.完成上述操作之后,选择工程右键&clean project&重新编译一次工程,发现错误变成了:
这是因为编译的时候找不到OpenCV SDK中的工具OpenCV.mk所导致的,也就是OpenCV SDK的匹配路径不正确或者是没有匹配,打开当前工程的jni文件夹下的Android.mk文件,这是C/C++编译时使用的配置文件,我们可以看到OpenCV.mk的路径必须为OPENCV_ANDROID_SDK目录下面,或者是与当前工程文件在同一目录下:
所以解决这个问题的方法是:在C/C++ Build的Environment页签再添加一个OPENCV_ANDROID_SDK路径配置常量:
三、案例运行:
完成以上所有配置之后,工程错误全部解决,那么接下来我们需要看看demo是否能正常运行起来,设备连接PC,然后选择工程右键&Run As&然后选中&Android Application&:
出现此提示的原因是OpenCV 2.4.3之后,apk正常运行必须依赖于OpenCV Manager.apk,找到OpenCV android sdk目录下面的apk目录:
这里适用于很多Android硬件设备,这里我选择安装的是armeabi-v7a这个版本的,顺利安装完OpenCV Manager之后,再次重启刚刚的demo,可以正常运行并看到结果如下:8404人阅读
OpenCV4Android(11)
咱家在前文:&介绍了OpenCV的OpenCV4Android版本的开发和使用,并附了用Java接口调用OpenCV在Android开发示例。前文:&介绍了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 &参考&点击下载tdm-gcc,安装时选择默认的支持C++/C的那种方式即可,默认会自动添加到系统环境变量。如果没有添加则手动添加:C:\TDM-GCC-32\ 安装完毕后打开cmd.exe,输入gcc --version测试版本.2、下载CMake&&安装。记得勾选添加环境变量,创建桌面快捷图标:3、将下载的OpenCV-2.4.4解压或安装到目录:D:\ProgramFile\opencv4、打开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_calib3d244opencv_contrib244opencv_core244opencv_features2d244opencv_flann244opencv_gpu244opencv_highgui244opencv_imgproc244opencv_legacy244opencv_ml244opencv_nonfree244opencv_objdetect244opencv_photo244opencv_stitching244opencv_ts244opencv_video244opencv_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&
int main()
cout&&&&&&
Mat img = imread(&F:\\kunlong.jpg&, CV_LOAD_IMAGE_COLOR);
int w = img.
int h = img.
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&&&&&&
}记得将kunlong.jpg放到F盘下。测试结果如下: 另外,关于这个头文件包含的问题,经过测试采用上述代码完全没有问题,如果对包含头文件有疑问可以参考这里:& 截止到这里,OpenCV4Android的使用、OpenCV2.4.4 for windows 的java接口调用、OpenCV2.4.4 for windows的C++、C接口(通过MinGW编译器)都交代清楚,所用到的开发IDE都是Eclipse,够强大吧。还有几分钟2014就要到来了,在2013年的最后一天祝福大家新的一年里注意身体健康,多多代码的同时坚持锻炼,祝大家万事如意、心想事成,新的一年进步多多! 如果您觉的我在认真写博客,CSDN2013博客之星评选,请为我投上一票,谢谢您的鼓励,咋家一定再接再励!投票链接:& -------本文系原创,转载请注明作者yanzi1225627,欢迎大家加入OpenCV4Android开发联盟群:,备注yanzi参考:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5168466次
积分:37228
积分:37228
排名:第111名
原创:378篇
转载:12篇
评论:2979条
阅读:4826
文章:23篇
阅读:563739
(4)(5)(1)(1)(1)(3)(1)(3)(5)(5)(5)(8)(4)(3)(3)(7)(10)(4)(2)(3)(1)(3)(7)(2)(1)(4)(1)(3)(17)(14)(7)(8)(7)(6)(3)(7)(7)(3)(3)(7)(5)(6)(11)(24)(6)(11)(10)(13)(11)(34)(39)(2)(23)(6)}

我要回帖

更多关于 opencv 嵌入式移植 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信