|
本帖最后由 mumumusuc 于 2016-6-19 17:22 编辑
题外话:没想到国内opencv论坛这么冷清啊。。
这篇文章的起因是楼主在实际工程开发中的经验总结,在这里做个记录。第一篇当然就是开发环境的搭建啦~
一.下载opencv4android
首先去opencv官网下载最新的OpenCVO4Android,最新的androidSDK有3.1和2.4.11,楼主这里下的是2.4.11版。
下载完毕,解压后就可以食用了(误)。C:\Users\leonardo\Desktop\an_28dav-1929photoshopthighhighszettai_ryouiki.png里面有4个文件夹:
/apk 放的是android上的OpenCV_Manager,我开发中不用这个。
- armeabi-v7a (ARMv7-A + NEON) | >= 2.3 | OpenCV_2.4.9_Manager_2.18_armv7a-neon.apk
- armeabi-v7a (ARMv7-A + NEON) | = 2.2 | OpenCV_2.4.9_Manager_2.18_armv7a-neon-android8.apk
- armeabi (ARMv5, ARMv6) | >= 2.3 | OpenCV_2.4.9_Manager_2.18_armeabi.apk
- Intel x86 | >= 2.3 | OpenCV_2.4.9_Manager_2.18_x86.apk
- MIPS | >= 2.3 | OpenCV_2.4.9_Manager_2.18_mips.apk
复制代码 /doc 放的是官方指导和说明文档
/sample 官方演示程序源码
/sdk android开发中要用的东西都在这
二.在eclipse中添加OpenCV
在eclipse中选择导入“Existing Android Code Into Workspace”,导入路径/sdk/java/OpenCV Library - 2.4.11。导入完成后alt+enter进入项目属性设置界面-Android,下方的Libaray中勾选“Is Library”。应用确定以后,这个项目就可以作为lib导入到其他项目了。
先不急着下一步,来看看SDK里提供了什么。
opencv官方对C/C++源码进行了java封装,src/目录下有最基本的api,简单介绍一下。
org.opencv.core 这个包里是opencv核心的数据结构和数据类型,Mat,Scalar,Point,Size都在其中。值得一提的是Core类中封装了opencv中“cv_”开头常量,不过现在它们大都都不已“cv_”开头了。Core类中还有所有绘图api,如circle、putText等等。
org.opencv.highgui 还在找imread和imwrite在哪?嗯,他们都在这里。
org.opencv.imgproc 所有的图片处理算法都在这。
org.opencv.features2d opencv看家的2d图形特色处理算法。
org.opencv.utils 原装没有但存在感爆棚的转换工具,起到android和opencv数据类型转换的api。
三.使用OpenCV作为lib使用
这一步比较难讲清,现在又发不了图片,先简单介绍一下,之后再补全。
之前说过楼主抛弃了OpenCV_Manager.apk这个累赘,这里推荐java+jni/NDK的开发方式。
OpenCV将c/c++封装成java后调用十分方便,比如很常用的灰度化:
- public static void cvtColor(Mat src, Mat dst, int code);
复制代码- Imgproc.cvtColor(src,dst,Imgproc.COLOR_RGBA2GRAY);
复制代码
怎么实现的呢?用脚趾头想都知道一定是JNI。
- public static void cvtColor(Mat src, Mat dst, int code){
- cvtColor_1(src.nativeObj, dst.nativeObj, code);
- return;
- }
复制代码 关于opencv和android之间的jni写法,之后再细说吧。
回到正题,我在开发中会直接调用封装好的java_api,这样可以保证代码书写效率,java_api中又是jni调用已有的c/c++代码,所以效率完全不用担心;对于自定义功能直接用native方法,java对于OpenCV中Mat的操作效率简直太捉急了(大概5倍之多,在相机中就是30fps和6fps的差距)。
具体怎么操作呢?下回写个OpenCVDemo.apk细说一下好了(懒)。
题外话:嗯,离发图片还差10积分,能发图片之后来补完一下这个帖子,还望大家多多支持~
|
|