零、前言
现在是第三版,这是有关 OpenCV 的 Python 绑定的原始书。 从经典到最先进的技术,从几何到机器学习,读者将学到各种各样的技术和算法。 所有这些都有助于解决构建良好的应用中的实际计算机视觉问题。 使用 OpenCV 4 和 Python 3,我们采用了计算机视觉新手可以访问的方法,同时也为想要扩展和更新技能的专家提供了有用的信息。
我们从介绍 OpenCV 4 开始,并说明如何在各种平台上使用 Python 3 进行设置。 接下来,您将学习如何执行基本操作,例如读取,写入,操作和显示静止图像,视频和照相机源。 您将学习图像处理和视频分析以及深度估计和分段,并通过构建一个简单的 GUI 应用来进行练习。 接下来,您将解决两个流行的问题:人脸检测和人脸识别。
随着我们的前进,我们将探索对象分类和机器学习的概念,使您能够创建和使用对象检测器和分类器,甚至可以跟踪电影或摄像机供稿中的对象。 然后,我们将把工作扩展到 3D 跟踪和增强现实。 最后,当我们开发应用以识别手写数字,并分类一个人的性别和年龄。
到本书结尾,您将掌握正确的知识和技能,可以进行自己的真实世界的计算机视觉项目。
这本书是给谁的
本书面向有兴趣在实际应用中学习计算机视觉,机器学习和 OpenCV 的人们。 本书将吸引计算机视觉新手以及希望了解 OpenCV 4 和 Python 3 的专家。读者应该熟悉基本的 Python 编程,但是没有图像处理,计算机视觉或机器学习的先验知识。 需要。
本书涵盖的内容
第 1 章,“设置 OpenCV”解释了如何在各种平台上使用 Python 3 设置 OpenCV 4。 它还提供了常见问题的故障排除步骤。
第 2 章,“处理文件,照相机和 GUI”引入了 OpenCV 的 I/O 功能。 它还讨论了 GUI 项目的面向对象设计,我们将在其他章节中进一步进行开发。
第 3 章,“用 OpenCV 处理图像”提出了更改图像所需的一些技术,例如操纵颜色,锐化图像,标记对象的轮廓以及检测几何形状。
第 4 章,“深度估计和分段”向您展示如何使用深度相机中的数据来识别前景和背景区域,以便我们可以将效果限制为仅前景或背景 。
第 5 章,“检测和识别人脸”引入了一些 OpenCV 的人脸检测和识别功能,以及定义特定类型可检测对象的数据文件。
第 6 章,“检索图像并使用图像描述符进行搜索”展示了如何借助 OpenCV 描述图像的特征,以及如何利用特征匹配和搜索图片。
第 7 章,“构建自定义对象检测器”结合了计算机视觉和机器学习算法来对图像中的对象进行定位和分类。 它显示了如何使用 OpenCV 实现这种算法组合。
第 8 章,“跟踪对象”演示了跟踪和预测视频或实时摄像机源中人和物体运动的方法。
第 9 章,“摄像机模型和增强现实”使您能够构建增强现实应用,该应用使用有关摄像机,对象和运动的信息,将 3D 图形实时叠加在跟踪的对象上。
第 10 章,“使用 OpenCV 的神经网络介绍”,向您介绍人工神经网络(ANN) OpenCV 中的深度神经网络(DNN),并说明了它们在实际应用中的用法。
附录 A,“弯曲带有曲线过滤器的颜色空间”,描述了颜色曲线的概念以及我们使用 SciPy 对其的实现。
充分利用这本书
希望读者至少具有 Python 编程语言的基本知识。
建议使用 Windows,macOS 或 Linux 开发计算机。 您可以参考第 1 章,“设置 OpenCV”,以获取有关设置 OpenCV 4,Python 3 和其他依赖项的说明。
本书采用动手学习的方式,包括 77 个示例脚本以及示例数据。 阅读本书时,通过这些示例进行工作将有助于实现这些概念。
本书的代码是根据 BSD 3-Clause 开源许可证发行的,该许可证与 OpenCV 本身使用的许可证相同。 鼓励读者使用,修改,改进,甚至将其更改发布到这些示例程序。
下载示例代码文件
您可以从这个页面的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问这个页面并注册以将文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
- 登录或注册 www.packt.com 。
- 选择支持选项卡。
- 单击代码下载。
- 在搜索框中输入书籍的名称,然后按照屏幕上的说明进行操作。
下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹:
- Windows 的 WinRAR/7-Zip
- Mac 的 Zipeg/iZip/UnRarX
- Linux 的 7-Zip/PeaZip
本书的代码包也托管在 GitHub 上。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。
我们还有丰富的书籍和视频目录中的其他代码包,可通过这个页面获得。 去看一下!
代码实战
可以在这个页面上查看本书的“实现中代码”视频。
下载彩色图像
我们还提供了 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 您可以在此处下载。
使用约定
本书中使用了许多文本约定。
CodeInText
:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“OpenCV 提供VideoCapture
和VideoWriter
类,它们支持各种视频文件格式。”
代码块设置如下:
import cv2
grayImage = cv2.imread('MyPic.png', cv2.IMREAD_GRAYSCALE)
cv2.imwrite('MyPicGray.png', grayImage)
当我们希望引起您对代码块特定部分的注意时,相关行或项目以粗体显示:
import cv2
cameraCapture = cv2.VideoCapture(0)
fps = 30 # An assumption
size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter = cv2.VideoWriter(
'MyOutputVid.avi', cv2.VideoWriter_fourcc('M','J','P','G'), fps, size)
通常,命令行输入或输出编写如下:
$ pip install opencv-contrib-python
或者,对于 Windows,命令行输入或输出可以编写如下:
> pip install opencv-contrib-python
粗体:表示新术语,重要单词或您在屏幕上看到的单词。 例如,菜单或对话框中的单词会出现在这样的文本中。 这是一个示例:“现在,在系统变量下,选择路径,然后单击编辑...按钮。”
警告或重要提示如下所示。
提示和技巧如下所示。