零、前言
本书将向您展示如何使用 OpenCV 的 Python 绑定通过普通的网络摄像头或专用的深度传感器(例如 Microsoft Kinect)捕获视频,操纵图像并跟踪对象。 OpenCV 是一个开放源代码,跨平台的库,为计算机视觉实验和应用提供了构建基块。 它提供了用于捕获,处理和呈现图像数据的高级接口。 例如,它抽象了有关相机硬件和数组分配的详细信息。 OpenCV 在学术界和工业界都被广泛使用。
如今,计算机视觉可以通过网络摄像头,照相手机和诸如 Kinect 之类的游戏传感器在许多情况下吸引消费者。 不管是好是坏,人们都喜欢坐在相机上,作为开发人员,我们面临着捕获图像,改变其外观并从中提取信息的应用的需求。 OpenCV 的 Python 绑定可以帮助我们以高级语言和可与 NumPy 和 SciPy 等科学库互操作的标准化数据格式探索满足这些要求的解决方案。
尽管 OpenCV 是高级的并且可以互操作,但是对于新用户而言,并不一定很容易。 根据您的需求,OpenCV 的多功能性可能会以复杂的设置过程为代价,并且在如何将可用功能转换为经过组织和优化的应用代码方面还存在一些不确定性。 为了帮助您解决这些问题,我努力提供了一本简明的书,重点在于简洁的安装,简洁的应用设计以及对每个功能用途的简单理解。 希望您能从本书的项目中学习,扩大规模,并且仍然能够重用我们共同创建的开发环境和部分模块化代码。
特别是,在本书第一章的结尾,您可以拥有一个开发环境,该环境可以链接 Python,OpenCV,深度相机库(OpenNI,SensorKinect)和通用科学库(NumPy,SciPy)。 在五章之后,您可以拥有一个有趣的应用的多种变体,该应用可以在实时照相机源中操纵用户的脸部。 在此应用的后面,您将拥有一个小的可重用函数和类库,您可以在将来的计算机视觉项目中应用它们。 让我们更详细地看书的进展。
这本书涵盖的内容
第 1 章,“设置 OpenCV”让我们研究在 Windows,Mac 和 Ubuntu 上设置 Python,OpenCV 和相关库的步骤。 我们还将讨论 OpenCV 的社区,文档和官方代码示例。
第 2 章,“处理文件,相机和 GUI”有助于我们讨论 OpenCV 的 I/O 功能。 然后,使用面向对象的设计,我们编写了一个应用,该应用显示实时摄像机供稿,处理键盘输入以及编写视频和静态图像文件。
第 3 章,“过滤图像”帮助我们使用 OpenCV,NumPy 和 SciPy 编写图像过滤器。 过滤器效果包括线性颜色操纵,曲线颜色操纵,模糊,锐化和轮廓轮廓。 我们修改了我们的应用,以将其中的一些过滤器应用于实时摄像机供稿。
第 4 章,“使用 Haar 级联跟踪脸部”允许我们编写一个分层的脸部跟踪器,该跟踪器使用 OpenCV 定位图像中的脸部,眼睛,鼻子和嘴巴。 我们还编写了用于复制和调整图像区域大小的函数。 我们修改了我们的应用,以便它可以找到并处理相机供稿中的人脸。
第 5 章,“检测前景/背景区域和深度”有助于我们了解 OpenCV 可以从深度摄像机捕获的数据类型(在 OpenNI 和 SensorKinect 的支持下)。 然后,我们编写使用此类数据将效果限制到前景区域的函数。 我们将此功能整合到我们的应用中,以便我们可以在操作面部区域之前进一步完善它们。
附录 A,“与 Pygame 集成”,让我们修改应用以使用 Pygame 代替 OpenCV 来处理某些 I/O 事件。 (Pygame 提供更多种事件处理功能。)
附录 B,“为自定义目标生成 Haar 级联”允许我们检查一组 OpenCV 工具,这些工具使我们能够为任何类型的对象或图案(不一定是面孔)构建跟踪器。
这本书需要什么
本书提供了所有相关软件的设置说明,包括包管理器,构建工具,Python,NumPy,SciPy,OpenCV,OpenNI 和 SensorKinect。 设置说明适用于 Windows XP 或更高版本,Mac OS 10.6(Snow Leopard)或更高版本以及 Ubuntu 12.04 或更高版本。 如果您愿意自己调整设置步骤,则其他类 Unix 的操作系统也应该工作。 您需要针对本书中所述的核心项目使用网络摄像头。 对于其他功能,项目的某些变体使用第二个网络摄像头,甚至使用与 OpenNI 兼容的深度摄像头,例如 Microsoft Kinect 或 Asus Xtion PRO。
这本书适合谁
本书非常适合计算机视觉新手并且喜欢通过应用开发学习的 Python 开发人员。 假设您以前有使用 Python 和命令行的经验。 对图像数据(例如,像素和颜色通道)的基本了解也将有所帮助。
约定
在本书中,您会发现许多可以区分不同类型信息的文本样式。 以下是这些样式的一些示例,并解释了其含义。
文本中的代码字如下所示:“Windows 上的两个可执行文件称为ONopencv_createsamples.exe
和ONopencv_traincascade.exe
。”
代码块设置如下:
negative
desc.txt
images
negative 0.png
negative 1.png
任何命令行输入或输出的编写方式如下:
> cd negative
> forfiles /m images\*.png /c "cmd /c echo @relpath" > desc.txt
新术语和重要词以粗体显示。 您在屏幕上看到的单词,例如在菜单或对话框中,将以如下形式显示在文本中:“单击下一步按钮可将您移至下一个屏幕”。
注意
警告或重要提示会出现在这样的框中。
---
提示
提示和技巧如下所示。