零、前言
《通过实用的计算机视觉项目掌握 OpenCV》包含九章,其中每一章都是基于 OpenCV 的 C++ 接口(包括完整的源代码),从头到尾针对整个项目的教程。 选择每章的作者是因为他们在该主题上为 OpenCV 社区提供了备受推崇的在线贡献,并且该书由一位主要的 OpenCV 开发人员进行了审查。 这是第一本书,而不是说明 OpenCV 功能的基础,而是展示了如何应用 OpenCV 解决整体问题,包括几个 3D 摄像机项目(增强现实,Motion 的 3D 结构,Kinect 交互)和几个面部分析项目(例如 ,皮肤检测,简单的面部和眼睛检测,复杂的人脸特征跟踪,3D 头部方向估计和人脸识别),因此它与现有的 OpenCV 书籍非常适合。
这本书涵盖的内容
第 1 章,“卡通化器和适用于 Android 的换肤器”包含完整的教程和源代码,适用于台式机应用和 Android 应用,它们可以从真实的相机图像中自动生成卡通或绘画 ,其中包括几种可能的卡通类型,包括换肤器。
第 2 章,“在 iPhone 或 iPad 上基于标记的增强现实”包含完整的教程,介绍如何为 iPad 和 iPhone 设备构建基于标记的增强现实(AR)应用。 每个步骤的说明和源代码。
第 3 章,“无标记增强现实”包含有关如何开发无标记增强现实桌面应用的完整教程,并解释了无标记增强现实是什么和源代码 。
第 4 章,“使用 OpenCV 探索运动结构”包含通过 OpenCV 中 SfM 概念的实现对运动结构(SfM)的介绍。 读者将学习如何从多个 2D 图像重建 3D 几何形状并估计相机位置。
第 5 章,“使用 SVM 和神经网络进行车牌识别的方法”包含完整的教程和源代码,可使用支持向量机和人工模式,使用模式识别算法构建自动车牌识别神经网络应用。 读者将学习如何训练和预测模式识别算法,从而确定图像是否为车牌。 它还将有助于将一组特征分类为一个角色。
第 6 章,“非刚性人脸跟踪”包含完整的教程和源代码,用于构建可对人脸的许多复杂部分进行建模和跟踪的动态人脸跟踪系统。
第 7 章,“使用 AAM 和 POSIT 进行 3D 头部姿势估计”包含了解什么有效外观模型(AAM)所需的所有背景知识,以及如何使用 OpenCV 使用一组具有不同面部表情的面部框架来创建它们。 此外,本章还介绍了如何通过 AAM 提供的拟合功能来匹配给定的框架。 然后,通过应用 POSIT 算法,可以找到 3D 头部姿势。
第 8 章,“使用 Eigenfaces 或 Fisherfaces 进行人脸识别”,包含用于实时人脸识别应用的完整教程和源代码,该应用包括基本的人脸和眼睛检测以处理旋转的眼睛。 图像中的面部和变化的照明条件。
第 9 章,“使用 Microsoft Kinect 开发流体墙”涵盖了交互式流体仿真的完整开发,该流体流体称为流体墙,它使用 Kinect 传感器。 本章将说明如何通过 OpenCV 的光流方法使用 Kinect 数据并将其集成到流体求解器中。
这本书需要什么
您无需具备计算机视觉方面的专门知识即可阅读本书,但是在阅读本书之前,您应该具有良好的 C/C++ 编程技能和 OpenCV 的基本经验。 没有 OpenCV 经验的读者可能希望阅读《学习 OpenCV》这本书,以了解 OpenCV 功能,或者阅读《OpenCV 2 Cookbook》,了解有关如何在推荐的 C/C++ 中使用 OpenCV 的示例。 模式,因为《通过实用的计算机视觉项目掌握 OpenCV》将向您展示如何解决实际问题,前提是您已经熟悉 OpenCV 和 C/C++ 开发的基础知识。
除了具有 C/C++ 和 OpenCV 经验外,您还需要一台计算机和您选择的 IDE(例如在 Windows,Mac 或 Linux 上运行的 Visual Studio,XCode,Eclipse 或 QtCreator)。 一些章节有进一步的要求,特别是:
- 要开发 Android 应用,您将需要 Android 设备,Android 开发工具和基本的 Android 开发经验。
- 要开发 iOS 应用,您将需要 iPhone,iPad 或 iPod Touch 设备,iOS 开发工具(包括 Apple 计算机,XCode IDE 和 Apple Developer Certificate)以及基本的 iOS 和 Objective-C 开发经验。
- 多个桌面项目需要将网络摄像头连接到计算机。 任何普通的 USB 网络摄像头都足够,但是可能需要至少 1 兆像素的网络摄像头。
- CMake 用于某些项目(包括 OpenCV 本身)中,以跨操作系统和编译器进行构建。 需要对构建系统有基本的了解,并且建议您了解跨平台的构建。
- 期望对线性代数有所了解,例如基本向量和矩阵运算以及本征分解。
这本书适合谁
《通过实用的计算机视觉项目掌握 OpenCV》对于拥有基本的 OpenCV 知识的开发人员创建实用的计算机视觉项目以及希望将更多计算机视觉主题添加到其技能集中的经验丰富的 OpenCV 专家来说,都是一本完美的书。 它面向希望通过 OpenCV C++ 接口解决实际问题的高级计算机科学大学生,毕业生,研究人员和计算机视觉专家,并通过实用的分步教程进行解决。
约定
在本书中,您会发现许多可以区分不同类型信息的文本样式。 以下是这些样式的一些示例,并解释了其含义。
文本中的代码字如下所示:“您应该将本章的大部分代码放入cartoonifyImage()
函数中。”
代码块设置如下:
int cameraNumber = 0;
if (argc > 1)
cameraNumber = atoi(argv[1]);
// Get access to the camera.
cv::VideoCapture capture;
当我们希望引起您对代码块特定部分的注意时,相关行或项目以粗体显示:
// Get access to the camera.
cv::VideoCapture capture;
camera.open(cameraNumber);
if (!camera.isOpened()) {
std::cerr << "ERROR: Could not access the camera or video!" <<
新术语和重要词以粗体显示。 您在屏幕上看到的单词,例如在菜单或对话框中,将以如下形式显示在文本中:“单击Next
按钮可将您移至下一个屏幕”。
注意
警告或重要提示会出现在这样的框中。
提示
提示和技巧如下所示。
读者反馈
始终欢迎读者的反馈。 让我们知道您对这本书的看法-您喜欢或不喜欢的东西。 读者反馈对于我们开发您真正能充分利用的标题非常重要。
要向我们发送一般性反馈,只需将电子邮件发送到<[feedback@packtpub.com](mailto:feedback@packtpub.com)>
,然后通过您的邮件主题提及书名。
如果您有专业知识的主题,并且对写作或撰写书籍感兴趣,请参阅 www.packtpub.com/authors 上的作者指南。