首页>参考读物>计算机科学与技术>人工智能

深入理解OpenCV:实用计算机视觉项目解析(原书第3版)
作者 : [美] 罗伊·希尔克罗特(Roy Shilkrot),[西班牙] 大卫·米兰·埃斯克里瓦(David Millán Escrivá) 著
译者 : 唐灿 译
出版日期 : 2020-02-20
ISBN : 978-7-111-64577-1
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 248
开本 : 16
原书名 : Mastering OpenCV 4, Third Edition
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书第3版仍然坚持“帮助计算机视觉工程师迈出掌握OpenCV的第一步”的初心。本书简化数学公式,但保留了重要的数学公式。针对当前热门的计算机视觉主题,如人脸及特征点检测、姿态估计,以及基于深度卷积网络的车牌识别,展示了从构思到运行的全过程,并提供了完整的项目代码。新版本加入“为项目找到最佳OpenCV算法”、“避免OpenCV中的常见陷阱”两个章节帮助程序员从成百上千的API中进行需求权衡、设计、技术选型、优化和避免陷阱。

图书特色

通过典型计算机视觉项目,系统讲解使用OpenCV技术构建计算机视觉相关应用的各种技术细节、方法和实践,并提供全部实现源码,为读者快速实践OpenCV技术提供翔实指导

图书前言

本书(现在是第3版)是计算机视觉工程师使用OpenCV作为工具的系列丛书之一。本书保留了最基本的核心数学公式,提供了从构思到运行代码的完整项目,涵盖了当前计算机视觉中的热门话题,包括人脸识别、关键点检测和姿态估计、具有深度卷积网络的车牌识别、从运动中恢复结构、增强现实的场景重建,以及本机和Web环境中的移动端计算机视觉。本书将作者在学术界和行业中实施计算机视觉产品及项目的丰富知识轻松打包,不但向读者介绍了API的功能,而且提供了对完整计算机视觉项目中设计选择的见解,并超越了计算机视觉的基础知识,从更高层次来设计和实现??复杂图像识别项目的解决方案。
本书的目标读者
本书主要面向的对象,是希望在C++环境下开始使用OpenCV的计算机视觉新手,鼓励他们从动手开始学习,而不是纠结于传统的基础数学知识。书中提供了有关当前常见的计算机视觉任务的OpenCV API的具体用例示例,同时鼓励“复制–粘贴–运行”这种学习方式并尝试将数学基础保持在最低限度。
如今,计算机视觉工程师可以选择多种工具和软件包,包括OpenCV、dlib、Matlab软件包、SimpleCV、XPCV和scikit-image。在覆盖范围和跨平台方面,没有什么比OpenCV做得更好。但是,对新手而言,OpenCV似乎令人望而生畏,仅在官方模块的API中就有成千上万的函数,这还不包括贡献的模块。尽管OpenCV本身也提供了较广泛的教程,也存在大量的有文档记录的项目,但大都缺乏从头到尾完成项目的教程来满足工程师的需要。
本书内容
本书直接或间接地涵盖了OpenCV的许多功能,包括许多贡献模块。 它还展示了如何在Web、iOS和Android设备以及Python Jupyter Notebook中使用OpenCV。 每章都针对一个不同的问题,说明如何实现此目标,介绍了解决方案及其理论背景,并提供了一个完整的、可构建的和可运行的代码示例。
本书旨在为读者提供以下内容:
有效的OpenCV代码示例,用于解决现代的、具有一定复杂度的计算机视觉问题
OpenCV工程和项目维护的最佳实践
使用实用的算法设计方法来应对复杂的计算机视觉任务
熟悉OpenCV最新的API (v4.0.0),并通过实例进行实践
本书涵盖以下章节:
第1章演示如何在台式机和小型嵌入式系统(如Raspberry Pi)上编写图像处理滤波器。
第2章演示如何使用SfM模块将场景重建为稀疏点云(包括相机姿态),以及如何使用多视图立体几何来获得稠密点云。
第3章介绍使用人脸模块进行人脸特征点(也称为人脸标志)检测的过程。
第4章介绍图像分割和特征提取、模式识别基础以及两种重要的模式识别算法:支持向量机(SVM)和深度神经网络(DNN)。
第5章展示用于检测人脸图像的不同技术,从经典的具有Haar功能的级联分类器到采用深度学习的新技术,不一而足。
第6章展示一种使用OpenCV.js(用于JavaScript的OpenCV的编译版本)为Web开发计算机视觉算法的新方法。
第7章展示如何使用OpenCV的ArUco模块、Android的Camera2 API和JMonkey
Engine 3D游戏引擎在Android系统中实现增强现实(AR)应用程序。
第8章展示如何使用OpenCV的iOS预编译库在iPhone上构建全景图像拼接程序。
第9章讨论在考虑OpenCV中的算法选择时应遵循的许多方法。
第10章回顾OpenCV的发展历史,以及随着计算机视觉的发展,其框架和算法产品逐步增多的过程。
充分利用本书
本书假定读者有扎实的编程和软件工程技能基础,并能使用C++从头开始构建和运行程序。本书还介绍了JavaScript、Python、Java和Swift的代码。希望深入研究这些部分的工程师若有C++以外的编程语言知识则会更加受益。
本书的读者应该能够以各种方式安装OpenCV。有些章需要安装Python,而有些章则需要安装Android。在随附的代码和文本中将详细讨论如何获取并安装它们。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
下载文件后,请确保使用以下最新版本解压缩文件夹:
Windows下,推荐使用WinRAR/7-Zip
Mac下,推荐使用Zipeg/iZip/UnRarX
Linux下,推荐使用7-Zip/PeaZip
本书的代码也托管在GitHub中,网址为https://github.com/PacktPublishing/Mastering-OpenCV-4-Third-Edition。如果代码有更新,它将在现有的GitHub存储库中进行更新。
可从https://github.com/PacktPublishing/获得更丰富的书籍和视频清单中的其他代码包,去看看吧!
我们还提供了一个PDF文件,其中包含本书中使用的屏幕截图/图表的彩色图像。可
以在http://www.packtpub.com/sites/default/files/downloads/9781789533576_ColorImages.pdf下载。
本书约定
本书中使用了许多排版约定。
文本代码(Code In Text):表示正文中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、URL、用户输入和twitter链接。下面是一个示例:“要查看SD卡上的剩余空间,请运行df-h head-2。”
代码块设置如下:

当我们希望引起你对代码块特定部分的注意时,相关的行或项目将以粗体显示:

命令行输入或输出的印刷方式如下:

粗体:表示新术语、重要单词或你在屏幕上看到的单词。 例如,菜单或对话框中的单词会出现在这样的文本中:“导航到Media | Open Network Stream”。
警告或重要提示信息。
提示或技术信息。

上架指导

计算机\图形图像

封底文字

本书秉承“帮助计算机视觉工程师迈出掌握OpenCV的第一步”的初心,在保留必要的数学公式的情况下,针对当前热门的计算机视觉主题,如面部识别、关键点检测、姿态估计,以及基于深度卷积网络的车牌识别,展示了从构思到运行的全过程,并提供了完整的项目代码。
无论你来自学术界还是工业界,都将从经验丰富的OpenCV专家那里学习如何轻松地实现计算机视觉产品和项目。通过多个完整的计算机视觉项目,你将熟悉API的功能,并深入了解在计算机视觉项目中如何设计和选型,从而超越计算机视觉的基础,从更高的层次上实现复杂的图像处理项目的解决方案。而且,你将能借助本书中的项目创建各种工作原型,对OpenCV 4的新功能做到烂熟于心。

通过阅读本书,你将学会:
使用有效的OpenCV代码对真实世界的计算机视觉问题进行建模
发现OpenCV项目及维护的最佳实践
探索用于复杂计算机视觉任务的算法设计方法
使用OpenCV新的API(v4.0.0)
从运动中理解3D场景结构和重建3D场景(SfM)
使用ArUco模块进行相机标定并叠加AR物体

作者简介

[美] 罗伊·希尔克罗特(Roy Shilkrot),[西班牙] 大卫·米兰·埃斯克里瓦(David Millán Escrivá) 著:罗伊·希尔克罗特(Roy Shilkrot)石溪大学(Stony Brook)计算机科学的助理教授,他领导着人群互动小组(Human Interaction group)。他毕业于麻省理工学院(MIT)并获得博士学位,致力于计算机视觉、人机界面以及其交叉领域的研究,撰写了25篇以上的论文。他还是多项专利技术的共同发明人,也是多本著作的合著者,是众多初创公司的科学顾问委员会的成员,拥有超过10年的工程师和企业家经验。

大卫·米兰·埃斯克里瓦(David Millán Escrivá)ITI(Instituto Tecnológico de Informática)的科学研究员,在IT领域从业超过10年,在计算机视觉、计算机图形和模式识别方面拥有丰富的经验,并运用他在计算机视觉、OCR和增强现实方面的知识与不同的项目和初创公司合作。他是DamilesBlog博客的作者,在那里他发表有关OpenCV、计算机视觉和光学字符识别算法的研究文章和教程。


译者序

近年来,深度学习在图像、声音和语义识别方面取得了长足的进步,首先影响的是OpenCV这样的老牌视觉识别库。因而,我们看到了OpenCV近年来的快速迭代,它在坚持以传统机器学习为主体的机器视觉的基础上,吸收了最新的深度学习成果,由原来的3.x版本升级为版本4,很多模块由原来的contrib部分固化并转入到主模块中。本书的版本升级也成了顺势而为的结果。
本书第3版秉承了一贯的面向工程的作风,在保留必要公式的情况下,将原有的工程项目升级到最新的技术,并带来了新的真实项目体验。这些项目包括在树莓派上进行实时图像处理、使用SfM模块进行3D可视化重构、使用新的深度人脸模块进行人脸检测、使用深度卷积进行车牌识别、学习全新的OpenCV.js、Android相机标定和AR 、iOS全景图实现等。本书第3版尤为可贵的在于加入了第9章“为项目找到最佳OpenCV算法”和第10章“避免OpenCV中的常见陷阱”,可帮助程序员在成百上千的API中进行需求权衡、设计、技术选型、优化和避免陷阱,这些经验之谈难能可贵,显著提升了本书的实用价值。
视觉工程不是简单的技术选型,每一个实现目标的背后都可能需要烦琐的前期步骤、中期的陷阱和曲折,以及后期的反复调优,希望本书能帮助视觉工程师利用最新的OpenCV技术实现工程中的需求,找出研究与应用之间的平衡。
感谢刘波老师对本书翻译的支持,也感谢柯增燕同学对本书所做的大量前期工作。特别要感谢我的妻子李平,她的体谅和付出让我得以抽出时间来进行提高和分享的工作。

图书目录

译者序
前言
作者简介
审阅者简介
第1章 树莓派上的卡通化和皮肤颜色分析 1
1.1 访问摄像头 2
1.2 桌面应用程序的相机处理主循环 4
1.2.1 生成黑白素描 4
1.2.2 生成彩色绘画和卡通 6
1.2.3 用边缘滤波器来生成邪恶模式 8
1.2.4 用皮肤检测来生成外星人造型 9
1.3 皮肤变色器的实现 12
1.4 从桌面移植到嵌入式设备 19
1.4.1 用于开发嵌入式设备代码的设备配置 21
1.4.2 在嵌入式设备上安装OpenCV 27
1.5 小结 39
第2章 使用SfM模块从运动中恢复结构 40
2.1 技术要求 40
2.2 SfM的核心概念 41
2.2.1 相机标定和对极几何 42
2.2.2 立体重建和SfM 45
2.3 在OpenCV中实现SfM 48
2.3.1 图像特征匹配 48
2.3.2 找到特征轨迹 52
2.3.3 3D重建和可视化 55
2.3.4 用于稠密重建的MVS 57
2.4 小结 60
第3章 使用人脸模块进行人脸特征点及姿态检测 61
3.1 技术要求 61
3.2 背景和理论 63
3.2.1 主动外观模型与受约束的局部模型 63
3.2.2 回归方法 64
3.3 OpenCV中的人脸特征点检测 65
3.4 基于特征点的人脸方向估计 68
3.4.1 估计姿态计算 69
3.4.2 将姿态投影到图像上 70
3.5 小结 71
第4章 基于深度卷积网络的车牌识别 72
4.1 ANPR简介 72
4.2 ANPR算法 74
4.3 车牌检测 77
4.3.1 分割 78
4.3.2 分类 84
4.4 车牌识别 87
4.4.1 OCR分割 88
4.4.2 基于卷积神经网络的字符分类 89
4.5 小结 105
第5章 通过DNN模块进行人脸检测和识别 106
5.1 介绍人脸检测和人脸识别 106
5.1.1 人脸检测 108
5.1.2 人脸预处理 116
5.1.3 收集人脸并从中学习 127
5.1.4 人脸识别 138
5.1.5 收尾工作——保存和加载文件 141
5.1.6 收尾工作——制作一个漂亮的、交互体验好的GUI 141
5.2 小结 153
5.3 参考文献 154
第6章 Web计算机视觉之初识OpenCV.js 155
6.1 什么是OpenCV.js 155
6.2 编译OpenCV.js 157
6.3 OpenCV.js开发基础 159
6.4 访问摄像头流 165
6.5 图像处理和基本用户界面 169
6.5.1 阈值滤波器 170
6.5.2 高斯滤波器 170
6.5.3 canny滤波器 170
6.6 浏览器中的光流 174
6.7 在浏览器中使用Haar级联分类器进行人脸检测 178
6.8 小结 180
第7章 使用ArUco模块的Android相机校准和AR 182
7.1 技术要求 182
7.2 增强现实和姿态估计 183
7.2.1 相机校准 184
7.2.2 用于平面重建的增强现实标记 186
7.3 Android系统中的相机访问 188
7.4 使用ArUco进行相机校准 191
7.5 使用jMonkeyEngine实现增强现实 195
7.6 小结 196
第8章 带有拼接模块的iOS全景图 198
8.1 技术要求 198
8.2 全景图像拼接方法 199
8.2.1 全景图的特征提取和鲁棒匹配 200
8.2.2 变形图像,以便全景创建 203
8.3 项目概况 204
8.4 用CocoaPods设置iOS OpenCV项目 204
8.5 用于全景捕捉的iOS UI 205
8.6 Objective-C++包装器中的OpenCV拼接 209
8.7 小结 212
8.8 进一步阅读 212
第9章 为项目找到最佳OpenCV算法 213
9.1 技术要求 213
9.2 方案是否包含在OpenCV中 214
9.3 OpenCV中的算法选项 215
9.4 哪种算法最好 217
9.5 算法性能比较的示例 218
9.6 小结 223
第10章 避免OpenCV中的常见陷阱 224
10.1 OpenCV从v1到v4的历史 224
10.2 OpenCV中的历史算法 228
10.3 常见陷阱和建议解决方案 231
10.4 小结 236
10.5 进一步阅读 236

教学资源推荐
作者: [英]西蒙 J.D. 普林斯(Simon J. D. Prince)著
作者: [美]查鲁·C. 阿加沃尔(Charu C. Aggarwal) 著
作者: (美)Joesph Giarratano
作者: [中]石川(Chuan Shi) [美]俞士纶 (Philip S. Yu) 著
参考读物推荐
作者: 赵志为 闵革勇 著
作者: [美]沙姆沙德·安萨里(Shamshad Ansari) 著
作者: [中]郑楠(Nan Zheng),[美]皮纳基·马祖姆德(Pinaki Mazumder) 著