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

深入理解OpenCV:实用计算机视觉项目解析
作者 : (巴西)Daniel Lélis Baggio, Shervin Emami, David Millán Escrivá, Khvedchenia Ievgen, Naureen Mahmood, Jason Saragih, Roy Shilkrot 著
译者 : 刘波 译
丛书名 : 华章程序员书库
出版日期 : 2014-09-18
ISBN : 978-7-111-47818-8
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 240
开本 : 16
原书名 : Mastering OpenCV with Practical Computer Vision Projects
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

OpenCV的主要开发者和OpenCV社区的主要贡献者携手,深入解析OpenCV技术在计算机视觉项目中的应用,Amazon广泛好评
通过典型计算机视觉项目,系统讲解使用OpenCV技术构建计算机视觉相关应用的各种技术细节、方法和最佳实践,并提供全部实现源码,为读者快速实践OpenCV技术提供翔实指导

OpenCV是最常见的计算机视觉库之一,它提供了许多经过优化的复杂算法。本书对已掌握基本OpenCV技术同时想提高计算机视觉的实践经验的开发者来讲是一本非常好的书。每章都有一个单独的项目,其背景也在这些章节中进行了介绍。因此,读者可以依次学习这些项目,也可以直接跳到感兴趣的项目进行学习。
本书详细讲解9个实用的计算机视觉项目,通过本书的学习,读者可以创建各种可运行的项目原型,例如,实时的移动应用、增强现实、从视频中获得三维形状、跟踪人脸和眼睛、车牌识别等。

通过阅读本书,你将学到:
用简单的人脸、眼睛、皮肤检测、Fisher脸、人脸识别、三维头部方向和复杂的面部特征跟踪来分析人脸。
用人工智能(AI)方法(如SVM和神经网络)来实现车牌识别和光学字符识别。
针对桌面系统、iPhone或iPad,用简单的人工标识或复杂的原始图像来实现增强现实(AR)。
通过平面的二维摄像机和采用从运动相机中得到3D结构(SfM)的重投影方法来生成3D对象模型。
重新设计基于桌面的实时计算机视觉应用,使其更适用于Android和iOS移动应用。
用Xbox Kinect传感器将整个身体作为输入来执行人机交互。

作者简介
Daniel Lélis Baggio 最初通过圣保罗的InCor开始接触计算机视觉,在那里,他曾从事血管内超声图像分割。从那时起,他一直专注于GPGPU,并移植分割算法到NVIDIA的CUDA上工作。他也潜心研究一个名为EHCI项目(http://code.google.com/p/ehci/),该项目采用自然的用户界面来实现六自由度头部跟踪。他现在在巴西空军工作。

译者简介
刘波  博士,重庆工商大学计算机科学与信息工程学院教师,主要从事机器学习的理论、计算机视觉和最优化技术研究,同时爱好Linux平台的编程和Oracle数据库。

内容简介
OpenCV是一个开源的计算机视觉库,在计算机视觉的开发中扮演着重要的角色。它为计算机视觉应用开发提供了灵活、功能强大的开发接口,使其成为计算机视觉专业人员所依赖的重要开发工具。本书系统地介绍如何使用OpenCV来构建与计算机视觉相关的应用,如增强现实、车牌识别、人脸检测等。每章都会介绍一个典型的计算机视觉应用问题,并提供相关的背景介绍及全部源代码,为快速解决实际计算机视觉项目遇到的问题提供系统实用指南。
全书共9章:第1章介绍Android系统上的卡通化和皮肤变换;第2章讲解如何针对iPhone或iPad设备来构建基于标记的增强现实(AR)应用;第3章讲解怎样开发无标记增强现实桌面应用;第4章介绍如何从2D图像重构3D几何结构,以及如何估计摄像机位置;第5章讲解如何通过模式识别算法来判断一幅图像是否为车牌;第6章构建一个动态人脸跟踪系统;第7章讲解如何根据AAM提供的拟合能力来匹配给定帧;第8章介绍基于特征脸或Fisher脸的人脸识别技术;第9章包含一个互动流体模拟器(流体墙)的完整开发流程。

图书前言

本书包含9章,每章都用一个完整项目作为教程,并提供全部源代码,这些源代码包含了用C++实现的OpenCV接口。每章都出自作者在OpenCV社区对某一主题所做出的令人瞩目的贡献, OpenCV的主要开发者也审阅了本书。本书没有解释OpenCV函数的基本功能,而是第一本介绍如何使用OpenCV来解决整个问题的书,其中包括几个3D摄像机项目(增强现实、从运动中恢复3D结构、Kinect交互)和几个面部表情分析项目(例如:皮肤检测、简单的面部和眼部检测、复杂的面部特征跟踪、三维头部姿势估计和人脸识别)。因此,本书能很好地与现有OpenCV书籍配合使用。
本书的主要内容
第1章包含一个针对桌面应用和Android应用的完整教程及相关源代码,这些应用可从真实摄像机图像中自动生成一幅卡通画或图画。在生成过程中,包括皮肤颜色变换在内的几种卡通类型可供选择。
第2章包含一个完整教程,该教程讲解如何针对iPhone或iPad设备来构建基于标记的增强现实(AR)应用,并给出每个步骤和源代码的解释。
第3章包含一个怎样开发无标记增强现实桌面应用的完整教程,并解释了无标记增强现实(AR)和其源代码。
第4章通过OpenCV实现运动中结构恢复的概念来介绍运动中的结构(SfM)。读者将学习如何从2D图像重构3D几何结构以及如何估计摄像机位置。
第5章包含一个完整教程及相关源代码,该教程是通过模式识别算法(支持向量机和人工神经网络)而建立的自动车牌识别应用。读者将学习如何训练和预测模式识别算法来判断一幅图像是否为车牌。这对通过一组特征来识别字符也有帮助。
第6章包含构建一个动态人脸跟踪系统的完整教程及相关源代码,该系统能模拟和跟踪人脸的一些复杂部位。
第7章包含理解主动外观模型(AAM)和通过OpenCV来根据有不同脸部表情的数据帧创建AAM的所有背景知识。除此以外,该章解释如何根据AAM提供的拟合能力来匹配给定帧。然后采用POSIT算法来找到3D头部姿态。
第8章包含实时人脸识别应用的完整教程和源代码,该应用包括基本的脸部和眼部检测算法,能处理图像中的人脸旋转和不同光照条件。
第9章包含一个交互式流体模拟器(称为流体墙)的完整开发流程,它采用Kinect传感器。该章将解释怎样通过OpenCV的光学流方法来使用Kinect数据并将其集成到一个流体求解算法中。请读者通过链接 http://www.packtpub.com/sites/default/files/downloads/7829OS_Chapter9_Developing_Fluid_Wall_Using_the_Microsoft_Kinect.pdf下载第9章。
阅读前的准备工作
阅读本书不需要具有计算机视觉的专业知识,但在阅读本书之前应该有良好的C / C ++编程技能和OpenCV的基本经验。没有OpenCV经验的读者不妨阅读《Learning OpenCV》来了解OpenCV的特性或阅读《OpenCV 2 Cookbook》来了解如何以受推崇的C++方式来使用OpenCV,因为本书将展示如何解决现实问题,并假定读者熟悉OpenCV和C/C++开发的基础知识。
除具有C/C++和OpenCV的经验外,读者还需要一台计算机和相应的IDE环境(例如: Visual Studio、 XCode、 Eclipse、QtCreator,它们可以运行在Windows、Mac或者Linux上)。有些章节有进一步的要求,特别是:
为了开发Android应用,读者需要一台Android设备、多种Android开发工具和基本的Android开发经验。
为了开发iOS应用,读者需要iPhone、iPad或iPod Touch设备、iOS开发工具(包含一台苹果电脑、XCode IDE、苹果开发者证书)以及基本的iOS和Objective-C的开发经验。
几个桌面项目需要一台与计算机相连的摄像机。任何普通的USB摄像机就足够了,但它至少是100万像素。
某些项目(包括OpenCV本身)会使用CMake来构建以支持跨平台和跨编译器。需要对构建系统有基本的理解,最好具有跨平台构建的知识。
需要了解线性代数方面的知识,例如:向量和矩阵的基本操作以及特征分解。
本书的读者对象
本书对想用基本的OpenCV知识来创建实际的计算机视觉项目的开发者来说是一本绝佳指南,此外,对于经验丰富并想获得更多计算机视觉主题的OpenCV专家而言也是非常好的一本书。本书向计算机科学相关专业的高年级本科生和研究生,以及研究人员和想用OpenCV C/C++ 接口来解决实际问题的计算机视频专家提供循序渐进的实用教程。

上架指导

计算机\图形图像

封底文字

OpenCV是最常见的计算机视觉库之一,它提供了许多经过优化的复杂算法。本书对已掌握基本的OpenCV技术,同时想提高计算机视觉的实践经验的开发者来讲是一本非常好的书。每章都有一个单独的项目,其背景也在这些章节中进行了介绍。因此,读者可依次来学习这些项目,也可以直接跳到感兴趣的项目进行学习。
本书详细讲解9个实用的计算机视觉项目,通过本书的学习,读者可以创建各种可运行的项目原型,例如,实时的移动应用,增强现实,从视频中获得三维形状,跟踪人脸和眼睛,车牌识别,等等。
通过阅读本书,你将学到:
 用简单的人脸、眼睛、皮肤检测、Fisher脸、人脸识别、三维头部方向和复杂的面部特征跟踪来分析人脸。
 用人工智能(AI)方法(如SVM和神经网络)来实现车牌识别和光学字符识别。
 针对桌面系统、iPhone或iPad,用简单的人工标识或复杂的原始图像来实现增强现实(AR)。
 通过平面的二维摄像机和采用从运动相机中得到3D结构(SfM)的重投影方法来生成3D对象模型。
 从新设计基于桌面的实时计算机视觉应用,使其更适用于Android和iOS移动应用。
 用Xbox Kinect传感器将整个身体作为输入来执行人机交互。

作者简介

(巴西)Daniel Lélis Baggio, Shervin Emami, David Millán Escrivá, Khvedchenia Ievgen, Naureen Mahmood, Jason Saragih, Roy Shilkrot 著:暂无简介

译者简介

刘波 译:暂无简介

译者序

视觉是人类获取信息的主要来源。图像、视频等视觉信息载体也是当今大数据时代最大的数据源之一,在计算机工程、通信、生物学、医学、军事等领域有着广泛应用。由于计算机视觉涉及多个领域的专业知识,以及视觉对象的复杂性和视觉任务的多样,这使计算机视觉研究很困难。
OpenCV是开源、跨平台的计算机视觉库,其全称是Open Source Computer Vision Library。它是由英特尔公司发起并参与开发的,可在商业和研究领域中免费使用。OpenCV能开发实时的图像处理、运动跟踪、目标检测等程序。
但目前通过实际应用项目来介绍OpenCV的书很少。本书通过8个典型的计算机视觉项目来介绍OpenCV强大、高效的功能。这8个项目涵盖了计算视觉的如下领域:基于iPhone或iPad的增强现实;从运动中得到3D结构;车牌识别;人脸识别与跟踪;三维头部姿态估计等。这些项目均用C/C++实现,对于关键代码,作者给出非常详细的介绍。在每章中,作者不但介绍项目的应用背景、整体框架、软件设计方法,同时也深入浅出地介绍了与项目相关的机器学习理论。毫不夸张地讲,这是一本用OpenCV来实践计算机视觉应用难得的好书。
翻译本书的过程也是我学习的过程,虽然辛苦但也不觉得累。为了做到专业词汇准确权威,书本内容正确,意译部分既不失原著意境又无偏差, 在翻译过程中查阅了大量相关资料。但由于时间和能力有限,书中内容难免存在纰漏。若有问题,读者可通过电子邮件liubo7971@173.com与我联系,欢迎一起探讨,共同进步。
本书翻译过程得到如下项目资助:(1)重庆市教委研究项目“多核正则化机器学习理论研究”,项目号:KJ130709;(2)重庆工商大学研究项目“基于多核学习的高维数据分析研究”,项目号:2013-56-09;(3)大数据稀疏表示判别字典学习及其应用技术研究项目号:KJ1400612。
感谢河南工业大学信息科学与工程学院的靳小波博士对本书翻译的支持与鼓励,也感谢我的家人,特别感谢我妻子杨雪莉和女儿刘典。虽然翻译本书占用了本应陪她们的大量时间,但她们一直包容并支持我。

图书目录

译者序
前 言
第1章 Android系统上的卡通化和皮肤变换 1
1.1 访问摄像机 2
1.2 桌面应用处理摄像机视频的主循环 3
1.3 生成黑白素描 4
1.4 生成彩色图像和卡通 5
1.5 用边缘滤波器来生成“怪物”模式 7
1.6 用皮肤检测来生成
“外星人”造型 8
1.6.1 皮肤检测算法 8
1.6.2 确定用户放置脸的位置 9
1.6.3 皮肤变色器的实现 10
1.7 把桌面应用移植到Android系统 14
1.7.1 安装使用OpenCV的Android项目 14
1.7.2 在Android NDK应用中添加卡通化代码 17
1.7.3 在Android系统中显示保存图像的消息 24
1.7.4 降低素描图像的随机椒盐噪声 27
1.8 总结 31
第2章 iPhone或iPad上基于标记的增强现实 32
2.1 使用OpenCV创建iOS项目 33
2.1.1 添加OpenCV框架 34
2.1.2 包含OpenCV头文件 35
2.2 应用程序的结构 36
2.3 标记检测 43
2.3.1 标记识别 44
2.3.2 标记编码识别 50
2.4 在三维空间放置标记 53
2.4.1 摄像机标定 53
2.4.2 标记姿态估计 54
2.5 渲染3D虚拟物体 56
2.5.1 创建OpenGL渲染层 56
2.5.2 渲染AR场景 59
2.6 总结 64
2.7 参考文献 64
第3章 无标记的增加现实 65
3.1 基于标记的AR与无标记的AR 65
3.2 使用特征描述符检测视频中的任意图像 66
3.2.1 特征提取 67
3.2.2 模式对象定义 69
3.2.3 特征点匹配 69
3.2.4 删除离群值 70
3.2.5 将示例项目各部分放在一起 76
3.3 模式姿态估计 77
3.3.1 PatternDetector.cpp 77
3.3.2 获取摄像机内矩阵 78
3.4 应用的基础架构 81
3.4.1 ARPipeline.hpp 82
3.4.2 ARPipeline.cpp 82
3.4.3 在OpenCV中启用三维可视化支持 83
3.4.4 使用OpenCV来创建OpenGL窗口 84
3.4.5 使用OpenCV捕获视频 85
3.4.6 渲染增强现实 85
3.4.7 演示应用程序 88
3.5 总结 91
3.6 参考文献 91
第4章 使用OpenCV研究从运动中恢复结构 92
4.1 从运动中恢复结构的概念 93
4.2 从两幅图像估计摄像机运动 94
4.2.1 通过丰富的特征描述符进行点匹配 94
4.2.2 通过光流进行点匹配 96
4.2.3 搜索摄像机矩阵 99
4.3 重构场景 102
4.4 从多视图中重构 105
4.5 重构的细化 108
4.6 用PCL来可视化3D点云 111
4.7 使用示例代码 113
4.8 总结 114
4.9 参考文献 115
第5章 基于SVM和神经网络的车牌识别 116
5.1 ANPR简介 116
5.2 ANPR算法 118
5.3 车牌检测 119
5.3.1 图像分割 120
5.3.2 分类 125
5.4 车牌号识别 127
5.4.1 OCR分割 127
5.4.2 特征提取 129
5.4.3 OCR分类 130
5.4.4 评价 133
5.5 总结 136
第6章 非刚性人脸跟踪 137
6.1 概述 138
6.2 实用工具 139
6.2.1 面向对象设计 139
6.2.2 数据收集:图像和视频标注 140
6.3 几何约束 145
6.3.1 Procrustes分析 146
6.3.2 线性形状模型 148
6.3.3 局部–全局相结合的表示 150
6.3.4 训练与可视化 152
6.4 面部特征检测器 154
6.4.1 相关性块模型 155
6.4.2 解释全局几何变换  159
6.4.3 训练与可视化 161
6.5 人脸检测与初始化 163
6.6 人脸跟踪 166
6.6.1 人脸跟踪实现 166
6.6.2 训练与可视化 168
6.6.3 通用与专用人脸模型 168
6.7 总结 169
6.8 参考文献 169
第7章 基于AAM和POSIT的
三维头部姿态估计 170
7.1 主动外观模型概述 171
7.2 主动形状模型概述 172
7.2.1 感受PCA 174
7.2.2 三角剖分 177
7.2.3 扭曲三角化结构 179
7.3 模型实例化——试试主动外观模型 180
7.4 主动外观模型搜索和拟合 181
7.5 POSIT算法 182
7.5.1 深入理解POSIT算法 183
7.5.2 POSIT与头部模型 185
7.5.3 对摄像机或视频文件进行跟踪 185
7.6 总结 187
7.7 参考文献 187
第8章 基于特征脸或Fisher脸的人脸识别 189
8.1 人脸识别与人脸检测介绍 189
8.1.1 第一步:人脸检测 191
8.1.2 检测人脸 194
8.1.3 第2步:人脸预处理 196
8.1.4 第3步:收集并训练人脸 204
8.1.5 第4步:人脸识别 212
8.1.6 收尾工作:保存和加载文件 215
8.1.7 收尾工作:制作一个漂亮的交互式GUI 215
8.2 总结 225
8.3 参考文献 225

教学资源推荐
作者: [美] 阿朗佐·凯利(Alonzo Kelly) 著
作者: 肖南峰 等编著
作者: (美)Tom Mitchell
作者: 王章阳(Zhangyang Wang) [美]傅云(Yun Fu) [美]黄煦涛(Thomas S. Huang) 编著
参考读物推荐
作者: [美] 罗伊·希尔克罗特(Roy Shilkrot),[西班牙] 大卫·米兰·埃斯克里瓦(David Millán Escrivá) 著
作者: [美] 李崇(Chong Li) 邱美康(Meikang Qiu) 著
作者: 余伶俐 周开军 陈白帆 著