零、前言
OpenCV 是用于计算机视觉,机器学习和图像处理的本地,跨平台 C++ 库。 它越来越多地在 Python 中用于开发。 OpenCV 具有 C++ / C,Python 和 Java 接口,并支持 Windows,Linux,Mac,iOS 和 Android。 使用 OpenCV 的开发人员构建应用来处理视觉数据; 其中可能包括实时流数据,例如来自相机等设备的照片或视频。 但是,随着开发人员超越他们的第一个计算机视觉应用,他们可能会发现很难针对现实世界的场景提出经过优化,强大和可扩展的解决方案。
本书演示了如何使用 OpenCV 和 Python 开发一系列中级到高级项目,而不是在理论课中教授 OpenCV 的核心概念。 本书中开发的工作项目教您如何将理论知识应用于诸如图像处理,增强现实,对象跟踪,3D 场景重建,统计学习和对象分类等主题。
到本书结尾,您将成为 OpenCV 专家,并且您新获得的经验将使您能够开发自己的高级计算机视觉应用。
这本书涵盖的内容
第 1 章,“过滤器的乐趣”探索了许多有趣的图像过滤器(例如黑白铅笔素描,加热/冷却过滤器和卡通化效果),以及我们将它们实时应用于网络摄像头的视频流。
第 2 章,“使用 Kinect 深度传感器进行手势识别”,可帮助您开发应用来使用深度传感器的输出实时检测和跟踪简单的手势,例如 Microsoft Kinect 3D Sensor 或 Asus Xtion。
第 3 章,“通过特征匹配和透视变换查找对象”,您可以在其中开发应用以检测网络摄像头视频流中的任意感兴趣的对象,即使该对象从不同角度或距离观看,或在部分遮挡下观看。
第 4 章,“使用运动结构重建 3D 场景”向您展示如何通过从摄像机运动中推断场景的几何特征来重建和可视化 3D 场景。
第 5 章,“跟踪视觉上的显着对象”可帮助您开发一个应用来跟踪视频序列中的多个视觉上的显着对象(例如足球比赛期间场上的所有球员) 一次。
第 6 章,“学习识别交通标志”向您展示如何训练支持向量机从德国交通标志识别基准(GTSRB)数据集中识别交通标志。
第 7 章,“学习识别面部表情”是开发可同时检测面部表情并实时识别摄像头视频流中表情的应用 。
这本书需要什么
本书支持多种操作系统作为开发环境,包括 Windows XP 或更高版本,Max OS X 10.6 或更高版本以及 Ubuntu12.04 或更高版本。 唯一的硬件要求是摄像头(或摄像头设备),但在第 2 章“使用 Kinect 深度传感器进行手势识别”中,而需要访问 Microsoft Kinect 3D 传感器或华硕 Xtion。
本书包含七个项目,具有以下要求。
所有项目都可以在 Windows,Mac 或 Linux 上运行,并且需要以下包:
- OpenCV 2.4.9 或更高版本 上提供了最新的 32 位和 64 位版本以及安装说明。 特定于平台的安装说明可在这个页面中找到。
- Python 2.7 或更高版本 上提供了最新的 32 位和 64 位安装程序。 可以在这个页面上找到安装说明。
- NumPy 1.9.2 或更高版本:此用于科学计算的包正式仅以 32 位格式提供,可以从这个页面。 可以在这个页面中找到安装说明。
- wxPython 2.8 或更高版本:此 GUI 编程工具包可从这个页面获得。 在这个页面上提供了其安装说明。
此外,某些章节需要以下免费的 Python 模块:
- SciPy 0.16.0 或更高版本(第 1 章):该科学的 Python 库正式仅以 32 位提供,可以从这个页面。 可以在这个页面中找到安装说明。
- matplotlib 1.4.3 或更高版本(第 4 至 7 章):此二维绘图库可从这个页面获得。 可以通过这个页面找到其安装说明。
- libfreenect 0.5.2 或更高版本(第 2 章):OpenKinect 项目的 libfreenect 模块提供了 Microsoft Kinect 硬件的驱动程序和库 ,并可以从这个页面获得。 可在这个页面中找到其安装说明。
此外,强烈建议使用 iPython,因为它提供了灵活的交互式控制台界面。
最后,如果您正在寻求帮助或一路走来,可以去几个提供出色帮助,文档和教程的网站:
这本书适合谁
本书适用于旨在通过开发高级实际应用来掌握技能的 OpenCV 中级用户。 您应该已经具有构建简单应用的经验,并且应该熟悉 OpenCV 的概念和 Python 库。 可以预期并假定具备 Python 编程的基本知识。
约定
在本书中,您会发现许多可以区分不同类型信息的文本样式。 以下是这些样式的一些示例,并解释了其含义。
文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字显示如下:“在 OpenCV 中,可以通过调用cv2.VideoCapture
访问网络摄像头。 ”
代码块设置如下:
def main():
capture = cv2.VideoCapture(0)
if not(capture.isOpened()):
capture.open()
capture.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 480)
新术语和重要词以粗体显示。 您在屏幕上看到的字词,例如在菜单或对话框中的字样如下:“快照按钮位于单选按钮的下方。”
注意
警告或重要提示会出现在这样的框中。
提示
提示和技巧如下所示。