天天看点

《Master Opencv...读书笔记》卡通化效果移植到android系统

昨天CSDN博客抽风了。这是第7次编辑这个文件了,之前老是提交失败!

声明

1.电脑比较坑爹,前置摄像头坏掉了。

2.卡通化效果运行比较慢,老外的书上说是,人每触摸一下屏幕,才生成一张卡通化效果的图片

因此,为了简便期间,我就只对一副图像进行卡通化效果。

原理什么的见前面的文章,本文的目的,是熟悉ndk和jni

环境需求:

eclipse juno

ndk(r9)

android sdk 4.4 api 19

opencv 2.4.7 android版本

cygwin

准备工作:

1.将E:\OpenCV-2.4.7.1-android-sdk\sdk中的java项目导入工作空间,日后凡事java端调用opencv的函数都要用到这个类库

2.安装opencv manager.apk,目前在android上所有的opencv程序都必须依附于android manger。在DOS窗口口中执行:

adb install <OpenCV4Android SDKpath>/apk/OpenCV_2.4.7_Manager_2.14_armv7a-neon.apk

开始项目:

1.新建android application工程,取名Cartoonfiy,右击项目属性,勾选opencv类库

《Master Opencv...读书笔记》卡通化效果移植到android系统

2.将林志玲MM的照片复制到drwabale随便哪个目录下,然后编写布局文件activity_main.xml:

效果比较丑,不管了:)

4.新建ImageProc类,编写本地化方法,作为调用c语言代码的入口:

5.在dos窗口中,使用javah工具,自动生成c语言的头文件,具体方法就是在DOS窗口中跑到Cartoonfiy项目的bin\classes目录下:

之后,在classes目录下将会有com_example_cartoonfiy_ImageProc.h文件,具体内容如下:

6.我们新建一个jni文件夹(名字就这个,不能随便改,否则ndk-build命令据说找不到的),把刚才的那个com_example_cartoonfiy_ImageProc.h文件拷贝过来。然后分别编写Android.mk:

和Application.mk:

7.回到MainActivity中,编写java端主要的代码:

好了,现在开始主要的C语言部分。由于是针对一副图像处理,我把上次的代码修改封装成一个函数,对应头文件和源文件内容分别是(这两个文件也放在jni目录下):

Cartoon.h:

Cartoon.cpp:

然后,编写我们的ImageProc.cpp:

最后用cygwin进行交叉编译:

打开cygwin,输入

cd /cygdrive/e/worksapce/Cartoonfiy

ndk-build

记得按F5,并clean一下工程,这是在libs目录下有个libimage_proc.so文件,

如果cygwin没有报错的话,然后运行我们的android applicatoin

运行效果:

《Master Opencv...读书笔记》卡通化效果移植到android系统
《Master Opencv...读书笔记》卡通化效果移植到android系统

注意:

1.老外书中说的android处理图片的color format,什么用照相机拍出来的是:YUV420s,用Bitmap读取的本地图片是:BGRA。当你的图像处理函数只能应付BGR时,你必须用cvtColor进行格式转换。老外又说什么转换格式会影响速度等等,这些先不管了。

2.关于c与java端数据传输,可以参考三个姓王的兄弟写的《android高级开发实战-UI、NDK、安全》。我这边在c 端直接把mat.data转换成int输出返回了。以后再学吧