OpenCV Android开发实战

更多详情

内容简介: 本书将分为两个部分。第 一部分为基础知识,从OpenCV框架的简单介绍到OpenCV、AndroidSDK、NDK的编程应用,系统全面地介绍OpenCV在移动领域的应用、所涉及的OpenCV中的核心模块、图像处理模块、特征提取与对象检测模块等。第二部分为实战案例,包括OCR识别、人脸美颜、人眼实时跟踪与渲染。

目录: 前言
第一部分 OpenCV图像处理系统学习篇
第1章 OpenCV Android开发框架 2
1.1 OpenCV是什么 2
1.1.1 OpenCV的历史与发展 3
1.1.2 OpenCV模块介绍 4
1.1.3 OpenCV Android SDK 5
1.2 OpenCV Android开发环境搭建 6
1.2.1 软件下载与安装 6
1.2.2 环境搭建 7
1.2.3 代码测试 13
1.3 构建演示APP 14
1.4 拍照与图像选择 18
1.5 小结 20
第2章 Mat与Bitmap对象 21
2.1 Mat对象 21
2.1.1 加载图像与读取基本信息 22
2.1.2 Mat创建与初始化 24
2.1.3 Mat对象保存 25
2.2 Android中的Bitmap对象 26
2.3 基础形状绘制与填充 29
2.4 Mat与Bitmap的使用与转换 34
2.5 小结 36
第3章 Mat像素操作 37
3.1 像素读写 37
3.2 图像通道与均值方差计算 40
3.3 算术操作与调整图像的亮度和对比度 44
3.4 基于权重的图像叠加 46
3.5 Mat的其他各种像素操作 48
3.6 小结 52
第4章 图像操作 53
4.1 模糊 53
4.2 统计排序滤波 59
4.3 边缘保留滤波 62
4.4 自定义滤波 64
4.5 形态学操作 67
4.6 阈值化与阈值 72
4.7 小结 78
第5章 基本特征检测 79
5.1 梯度计算 79
5.2 拉普拉斯算子 82
5.3 Canny边缘检测 83
5.4 霍夫直线检测 86
5.5 霍夫圆检测 89
5.6 轮廓发现与绘制 91
5.7 轮廓分析 94
5.8 图像直方图 98
5.9 模板匹配 107
5.10 小结 110
第6章 特征检测与匹配 111
6.1 Harris角点检测 111
6.2 Shi-Tomasi角点检测 114
6.3 SURF特征检测 116
6.4 SIFT特征检测 121
6.5 Feature2D中的检测器与描述子 128
6.6 特征匹配查找已知对象 134
6.7 级联分类器与人脸检测 137
6.8 小结 143
第7章 相机使用 144
7.1 使用JavaCameraView 144
7.2 横屏与竖屏显示 151
7.3 相机预览帧图像处理 153
7.4 在预览帧中实现人脸检测 155
7.5 小结 161
第二部分 OpenCV4Android应用实战
第8章 OCR识别 164
8.1 什么是OCR 164
8.2 开源OCR框架Tesseract 167
8.3 识别身份证号码 170
8.3.1 UI部分实现 171
8.3.2 号码区域查找 172
8.3.3 号码识别 174
8.4 提高OCR识别率 177
8.4.1 使用Tesseract命令行生成训练数据 177
8.4.2 图像预处理 181
8.5 小结 184
第9章 人脸美颜 185
9.1 积分图计算 185
9.2 局部均方差滤波 189
9.3 遮罩层生成 192
9.4 高斯权重融合 194
9.5 边缘提升 196
9.6 美颜实现 198
9.7 小结 204
第10章 人眼实时跟踪与渲染 205
10.1 界面显示与相机预览 205
10.2 人脸检测与跟踪 208
10.3 寻找眼睛候选区域 213
10.4 眼睛检测 214
10.5 黑眼球定位 217
10.6 渲染与优化 220
10.7 小结 222

前言: 为什么要写这本书
2015年,我出版了第一本图像处理方面的图书《Java数字图像处理:编程技巧与应用实践》,该书主要讲述图像处理的各种基础算法原理与代码实现,基于Java语言进行描述,没有太多的工程应用实践案例,是一本编程实践入门级的图像处理图书。因此我一直想再写一本工程实践性比较强的图书,Java与Android程序员可以通过这样的书籍,摆脱底层算法实现难的烦恼,快速学习相关API的使用,掌握常见的图像处理技术,快速开发应用,上手计算机视觉应用开发;他们通过学习与参照书中的工程实践案例,可以解决实际需求,提升个人竞争力,为企业和个人在短时间内创造更大的价值。
OpenCV作为一款开源的计算机视觉框架,封装了超过1000个常见的图像处理算法,其SDK语言支持Java、C++、Python等。借助人工智能兴起的东风,近几年OpenCV开发者社区的发展非常迅速,人数成几何级递增,而且已经对Android系统有了良好的支持与完备的SDK开发接口。在无须了解底层算法实现的情况下,借助OpenCV提供的SDK,Android开发者可以实现OCR识别、图像处理、人脸检测、相机校正、实时视频分析与处理、AR增强等移动端应用开发。
对大多数Android开发者来说,OpenCV与计算机视觉应用开发都可能显得有点陌生,因为市面上缺乏专业的工程性书籍与文档,OpenCV社区对Android SDK本身也没有提供完善的API文档与代码演示,这让很多Android程序员无法顺利使用OpenCV框架在移动端开发计算机视觉相关的应用。本书系统性地讲述OpenCV如何在Android系统上应用开发与工程实践,撰写本书的时候,因为OpenCV的很多API调用参数缺少文档说明,因此笔者需要通过编程实践一点一点全部尝试之后再总结出来,用实践出真知来形容本书一点也不过分。笔者本人是个地道的程序员,特别理解和了解程序员的视角与工程应用的重点和难点,本书从程序员的视角出发,在思路分析与代码实现上,对每个案例都做了非常清楚的交代与解释,对不同算法函数的应用场景都有详细的代码演示。本书最后三个案例分别涉及OCR识别、人脸美颜算法、视频检测与跟踪渲染这些实际落地场景,这三个案例是笔者本人精心挑选的,涵盖了大多数Android开发者的工程实践需求与工作需要,力求做到尽善尽美,然“人无完人,金无足赤”,最终还需读者评价。
如果说我的第一本书是对我十年工作的总结,那么本书就是我十年之后再出发的征途起点,“远飞者当换其新羽”,对广大Android与Java程序员来说,处在人工智能时代,掌握前沿技术,更新自己的技术栈,提升个人竞争力,计算机视觉与OpenCV就是个很好的方向与选择。作为技术人员唯有鼎故革新、砥砺前行,才能不负这个最好的时代,本书也是献给广大Android与Java程序员最好的礼物。
最后,希望通过本书的知识和作者有限的经验,帮助广大Android与Java程序员,以及众多有志于从事计算机视觉的后来者,借助OpenCV框架走上计算机视觉应用开发的道路。本书的顺利出版离不开笔者对OpenCV与计算机视觉技术的兴趣,更离不开笔者的毅力与本书写作初衷。希望本书能为国内OpenCV框架使用的普及与应用开发实践尽绵薄之力,若能如愿也不枉我的一番努力。
读者对象
本书适合于以下读者对象。
广大Android与Java程序员。
从事图像处理的工作者。
学习图像处理的爱好者。
希望提升自我的中高级程序员。
计算机专业高年级本科生或者研究生。
从事图像处理行业的公司与个人。
开设图像处理相关课程的大专院校学生。
如何阅读本书
本书共分为两大部分,其中第一部分为第1章到第7章,系统地介绍了OpenCV
Android的开发框架及功能。第二部分是本书的案例部分,系统全面地分析了三个实际案例,讲解如何借助OpenCV框架解决实际问题。如果你已经对Java语言和Android系统上的SDK开发有基本的认识,那么可以直接开始阅读本书,书中的源代码也是本书的一部分,建议在阅读本书内容的同时,尝试运行与修改本书提供的源代码,这样有助于更加深刻地理解与之相关的API参数与算法应用场景。
第一部分为基础篇,由浅入深,从OpenCV框架的简单介绍到OpenCV与Android SDK、NDK的编程应用,系统全面地介绍了OpenCV在移动领域的应用、OpenCV中的核心模块、图像处理模块、特征提取与对象检测模块等。读者在学习与掌握OpenCV 相关API用法的前提下可以学习第二部的实战案例。
第二部分为实战案例部分,由OCR识别、人脸美颜、人眼实时跟踪与渲染三个典型案例组成。通过案例学习,读者将学会如何设计算法流程、使用组合算法API、关注应用的性能与内存问题,以及NDK开发技巧、其他图像处理开发相关API的使用技巧。
此外,本书的源文件可到www.hzbook.com上搜索本书书名下载,或者到Github上下载本书演示工程,网址为https://github.com/gloomyfish1998/opencv4android/tree/master/
samples/OpencvDemo。
本书参考资料也可从Github上下载,网址为https://github.com/gloomyfish1998/opencv4android。
勘误和支持
由于笔者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者不准确的地方,不妥之处在所难免,恳请读者批评指正。笔者已经把本书配套的源代码上传到Github,访问地址为https://github.com/gloomyfish1998/opencv4android/tree/master/samples/OpencvDemo,如果有读者想直接提交勘误代码,请先邮件联系笔者,笔者同意以后即可提交,同时笔者也会根据读者反馈更新源代码,所以在阅读本书之前请先从Github上获取最新的配套源代码。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱57558865@qq.com,很期待听到你们的真挚反馈。
致谢
OpenCV能有今天的发展,首先要感谢英特尔当时的开源决策,其次是OpenCV社区的巨大贡献,我第一次接触OpenCV就被它的开发效率吸引住了,可以说OpenCV是计算机视觉应用开发最好用的工具之一,特别是OpenCV3.0以后的版本,非常容易学习,所以要感谢那些为OpenCV做出过贡献的杰出开发者。在我写作本书的时候,机械工业出版社华章公司的编辑杨绣国老师一直没有向我催稿,反而告诉我要安心创作,认真细致,后期审稿的时候也是逐字逐句推敲,反复修改,感谢你的耐心与严谨,正是你的鼓励、帮助和支持引导我顺利完成本书撰写。
最后感谢我的爸爸、妈妈,感谢你们给予我生命,将我培养成人,感谢我的妻子在我写书的这一年多时间里让我从家务中解脱,给予我支持与鼓励。
谨以此书,献给我最亲爱的两个孩子,以及众多热爱OpenCV编程的朋友。
贾志刚
中国,苏州,2018年3月

媒体评论: 随着人工智能的迅速发展,人类的工作方式、生活方式和思维方式也被深刻改变。作为Android与Java开发者,在这样一个技术急剧变革的时代,如何才能跟上技术发展的步伐?计算机视觉作为人工智能领域最重要的分支学科之一,被喻为人工智能的眼睛,学习计算机视觉技术与OpenCV框架能更好地帮助开发者提升技术竞争力,实现自我价值与公司价值。本书注重计算机视觉技术的应用,针对当前流行的计算机视觉框架OpenCV时,不仅针对基本的安装配置、环境搭建、基础模块进行了介绍,还针对重要的函数原理、参数解释及代码实现都做了详细解读。希望通过本书可帮助开发者在较短的时间掌握OpenCV与计算机视觉应用开发必备的知识与工程能力,实现自我能力的跃升,跟上人AI企业的技术发展趋势。
本书的主要内容和特色:
全书从程序员的独特视角阐述OpenCV中相关函数的知识点,尽量少引入复杂的数学公式推导,坚持以代码实践来演示函数用法。
从安装配置到环境搭建,再到各个模块的重要函数,都是结合应用场景来讲解的,始终坚持理论与实践应用相结合的方式,帮助读者厘清思路,学会综合运用所学知识解决项目难题。
不仅介绍了图像处理、二值化处理、图像特征提取、对象检测与对象匹配等常见算法,还联系实际应用,介绍了摄像头使用、OpenCV NDK开发、人脸检测与跟踪、OCR识别等工程案例实践。
基于Java语言和少量C++实现本书的代码演示,易于阅读,有助于读者熟悉OpenCV中相关函数的使用与编程实现技巧。
每一个章节都有对应函数的介绍和代码实践,对一些重要函数,还有一些总结与注意点提示,这些都来自作者的实践经验。