本书讲解了如何在Android应用程序中绑定OpenCV的Java内容,进而显示相机画面、保存-共享照片、操控颜色和轮廓边以及跟踪2D或3D中的对象。另外,本书还讨论了OpenGL的整合方式,读者可据此构建增强现实(AR)程序,进而在相机画面的跟踪对象上绘制虚拟3D场景。
作为一类开源、跨平台库,OpenCV提供了计算机视觉和应用构建模块,以及针对捕捉处理和图像数据显示的高层接口。例如,OpenCV抽象了相机硬件的细节内容以及数组的内存分配。同时,OpenCV广泛地应用于教学和软件工业中。
Android则是一类开源移动操作系统,对于Java开发者而言,它提供了称作Android SDK的高层应用框架。Android应用程序是一类模块化程序,并针对数据的发布和共享定义了标准的高层接口。针对照片共享应用,移动、高层抽象和数据共享可视为较好的开始点。
虽然OpenCV和Android提供了大量的高层抽象内容(以及开源代码),但对于初学者而言并不容易掌握,例如构建适宜的开发环境,将库功能项移至应用程序中。对此,本书旨在强调清晰的构建过程、简洁的应用设计以及各功能项的详细内容。
鉴于OpenCV的Java和Android绑定尚为新鲜事物,因而其文档并不完整,针对OpenCV与Android的标准相机、媒介以及图形API尤其如此。需要说明的是,整合工作是应用程序开发者的重要任务之一,也是本书的讲解重点。
OpenCV和Android库之间的整合过程充分体现了广泛的应用程序特征,本书结束时将会对此予以尝试。届时,读者可通过可复用的类库扩展或调整后续的计算机视觉项目,并根据已有的开发环境和知识编写更为丰富的应用程序。
本书内容
第1章讨论OpenCV和Android开发环境的构建过程,其中包括Eclipse和Android SDK。
第2章讨论OpenCV与Android应用程序之间的整合方式,进而预览、捕捉、保存和共享照片数据。
第3章探讨OpenCV的功能项,包括颜色通道的控制以及邻接像素问题。除此之外,还将对现有应用程序进行扩展,以使其包含通道混合滤镜、"曲线"滤镜和黑色轮廓边滤镜。
第4章将展示视频画面中既定目标对象(例如油画作品)的识别和跟踪机制。同时,还将对已有应用程序进行适当扩展,并围绕跟踪目标绘制轮廓线。
第5章通过确定3D环境中目标的位置和旋转改善前述跟踪机制。另外,本章还将构建OpenGL 3D场景,并包含与Android相机设备相同的透视视角。
背景知识
本书将讨论OpenCV和Android开发环境的构建过程,其中包括Eclipse和Android SDK。同时,对应软件均包含跨平台特征,包括Windows、Mac、Linux以及其他类UNIX环境。
读者需要持有一部可运行Android 2.2(Froyo)或后续版本的移动设备,并建议设备包含前置和后置相机。另外,鉴于OpenCV使用Google Play Store管理安装和共享库的更新操作,因而推荐安装Google Play Store应用程序。
本书读者
本书适用于Java开发人员,以及致力于计算机视觉应用开发的读者。本书假设读者具备一定的Java开发经验(但缺乏相应的Android知识),并对图形数据有着基本的理解,例如像素、颜色通道等内容。
本书结构
本书包含了大量不同的文本风格,并以此区分不同种类的信息。下列内容展示了相应的文本风格和对应的解释内容。
文本中的代码字样通常显示为:"编辑系统路径PATH并包含/platform- tools和/tools"。
对应代码块如下所示:
"http://schemas.android.com/apk/res/android"
package="com.nummist.secondsight"
android:versionCode="1"
android:versionName="1.0">
当强调特定的代码段时,相关内容采用粗体表示,如下所示:
mCameraView.enableView();
mBgr = new Mat();
mCurveFilters = new Filter[] {
new NoneFilter(),
new PortraCurveFilter(),
new ProviaCurveFilter(),
命令行输入和输出如下所示:
$ cd /etc/udev/rules.d/
$ sudo touch 51-android.rules
$ sudo chmod a+r 51-android-rules
另外,某些新增内容和重要内容也采用粗体表示,而屏幕、菜单或对话框中的文本则采用原文显示,例如"clicking on the Next button moves you to the next screen"。
最后,"提示"表示一些较为重要的提示;"技巧"则表示相关的操作技巧。
读者反馈和技术支持
欢迎读者对本书的建议或意见予以反馈,以进一步了解读者的阅读喜好。反馈意见对于我们来说十分重要,以便改进我们日后的工作。
对此,读者可向feedback@packtpub.com发送邮件,并以书名作为邮件标题。
若读者意欲查询出版信息,可在www.packtpub.com网站的SUGGEST A TITLE表项中填写相关信息,或发送邮件至suggest@packtpub.com。
若读者针对某项技术具有专家级的见解,抑或计划撰写书籍或完善某部著作的出版工作,则可阅读www.packtpub.com/authors中的author guide一栏。
资源下载
读者可访问http://www.packtpub.com下载本书中的示例代码文件;或者访问http://www. packtpub.com/support,经注册后可直接通过邮件方式获取相关文件。
除此之外,读者还可访问作者网站http://nummist.com/opencv/下载本书示例代码。
勘误表
尽管我们在最大程度上做到尽善尽美,但错误依然在所难免。如果读者发现谬误之处,无论是文字错误或是代码错误,还望不吝赐教。对于其他读者以及本书的再版工作,这将具有十分重要的意义。对此,读者可访问http://www.packtpub.com/support,选取对应书籍,单击errata submission form超链接,并输入相关问题的详细内容。经确认后,填写内容将被提交至网站,或添加至现有勘误表中(位于该书籍的Errata部分)。同时,读者还可访问http://www.packtpub.com/support查看当前勘误表。
版权须知
一直以来,互联网上的版权问题从未间断,Packt出版社对此类问题异常重视。若读者在互联网上发现本书任意形式的副本,请告知网络地址或网站名称,我们将对此予以处理。
关于盗版问题,读者可发送邮件至copyright@packtpub.com。对于作者的爱护,我们表示衷心的感谢,并于日后向读者呈现更为精彩的作品。
问题解答
若读者对本书有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务;或者访问作者网站http://nummist.com/opencv/获取常见问题的答案。
本书作者和审校人员
Joseph Howse很可能现在正坐在家中的沙发上撰写某本书籍,或者拎着手提箱处于奔波途中,箱子中被书籍、相机和计算机等设备填满。Joseph Howse喜欢用这种"观察世界的方式"装备自己,要不就是在执行计算机视觉方面的工作。
Joseph Howse在加拿大的Ad-Dispatch公司工作,并负责iOS和Android平台的增强现实游戏的开发工作。当与计算机视觉协同工作时,游戏中使用了大量的真实道具,例如孩子的绘画作品、玩具和毛毯。
另外,Joseph Howse还提供培训和咨询等服务,其中包括基于OpenCV人脸识别的嵌入式系统项目。
Joseph Howse拥有计算机科学专业、国际发展研究专业以及商务管理专业3个硕士学位(加拿大Dalhousie大学),其研究成果曾被ISMAR发表。
本书是Joseph Howse在Packt出版社出版的第二本书籍,另外一本是《OpenCV Computer Vision with Python》,该书介绍了Windows、Mac以及Linux操作系统上的脸部跟踪和深度相机(例如Kinect)等内容。
下面一段文字引自Joseph Howse:
"我擅长写作并享受这一过程。这里要感谢和Sam在一起的日子,以及父母和我的猫咪,他们是我的精神支柱。"
"感谢本书的编辑和审校人员,在他们的指导下本书方得以出版。他们的专业、友好、良好的判断力以及热忱为本书增加了极大的色彩。"
Rohit Bhat是一名毕业于印度BITS Pilani的本科生,并在业界领先的Big Data Analytics公司担任软件工程师一职。他所参与的开发项目涉及多种科技领域,其中包括数据挖掘、Android开发、OpenCV、群集智能、工作流自动化以及视频会议平台。Rohit Bhat热衷于最新技术,并可就任何话题与你展开讨论。另外,阅读、创业、经济学以及时下的新闻同样是他关注的话题。他热爱写作并在业余时间撰写自己的博客。
当前,Rohit Bhat正在为Packt出版社编写一本Bonita Open Solution方面的书籍,相关技术广泛地应用于工作流自动化和商业处理建模中。
Viral Parekh是一名计算机科学专业的大学生,同时也是一名经验丰富的移动应用程序开发者,并熟悉多种开源库,例如OpenCV、OpenNI、FFmpeg。当前,他从事于人机交互和增强现实方面的开发工作。
展开