第1章
Android系统上的卡通化和皮肤变换
本章将介绍如何针对Android智能手机和平板电脑编写图像处理滤波器,首先在台式机上(用C/C++)实现,然后移植到Android 系统上(用C/C++实现的代码与台式机一样,但GUI用Java来编写),这是移动设备开发所推崇的方式。本章的主要内容如下:
如何将现实生活中的图像转换为素描;
如何生成彩色图画并将素描叠加上去来生成卡通画;
用恐怖的“怪物”模式来创建坏人形象;
通���基本的皮肤检测器和皮肤变色器让人脸变成绿色“外星人”皮肤;
如何将桌面应用项目转换为移动设备上的应用程序。
下面的屏幕截图来自于运行在Android平板电脑上的卡通化应用程序。
本章希望摄像机拍摄的现实世界看起来像卡通画一样。其基本思路是用某种颜色来填充平整部分,然后用粗线来绘制图像较明显的边缘。也就是说,平整区域变得更加平,而边缘应变得更加明显。可先检测边缘并对平整区域进行平滑处理,然后增加边缘并从顶部开始来产生一个卡通或漫画效果。
当开发移动设备上的计算机视觉应用时,一种好的方法是先创建一个完整的桌面应用版本,再移植到移动设备上,因为开发和调试桌面应用程序比移动应用程序要容易!因此,本章将以一个完整的卡通化桌面应用开始,读者可用自己喜欢的IDE(如:Visual Studio、 XCode、Eclipse、QtCreator等)来编写该应用。当其在PC上正确运行后,我们将在*后一节介绍如何用Eclipse将其移植到Android (或iOS)系统中。因此会创建两个不同的项目,它们会共享绝大多数源代码,但有不同的图形用户界面。可创建两个项目都可使用的库,但为了简化起见,可将桌面项目和Android项目放在一起,让Android项目通过desktop文件夹来访问一些文件(cartoon.cpp和cartoon.h,它们包含了所有图像处理代码)。例如:
C:\Cartoonifier_Desktop\cartoon.cpp
C:\Cartoonifier_Desktop\cartoon.h
C:\Cartoonifier_Desktop\main_desktop.cpp
C:\Cartoonifier_Android\...
桌面应用有一个OpenCV GUI窗口,初始化摄像机,并在处理摄像机的每帧时都调用cartoonifyImage ()函数,该函数包含了本章大多数代码。然后在GUI窗口显示被处理的图像。与之类似,Android应用程序也有一个Android GUI窗口,会用Java程序来初始化摄像机,并调用前面提到的那个用C++实现的cartoonifyImage ()函数来处理摄像机的每一帧,除此之外还有Android 菜单并支持触摸输入。本章将从头开始介绍如何创建桌面应用程序,该Android应用基于其中的一个OpenCV Android示例项目。因此,首先在读者所熟悉的IDE中创建桌面应用程序,其中,用于保存GUI代码的main_desktop.cpp文件将在下一节给出,该文件包含主循环、摄像机功能以及键盘输入,同时,还应创建两个项目共享的cartoon.cpp文件。本章大多数代码都会放在函数cartoonifyImage ()中,该函数保存在cartoon.cpp文件中。