首页>参考读物>计算机科学与技术>软件与程序设计

OpenCV 4计算机视觉:Python语言实现(原书第3版)
作者 : [加]约瑟夫·豪斯(Joseph Howse),[爱]乔·米尼奇诺(Joe Minichino) 著
译者 : 刘冰 高博 译
出版日期 : 2021-08-23
ISBN : 978-7-111-68948-5
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 249
开本 : 16
原书名 : Learning OpenCV 4 Computer Vision with Python 3, Third Edition
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书首先介绍OpenCV 4以及如何基于Python 3在各种平台上安装OpenCV 4。接下来,你将学习如何执行读取、写入、操纵,以及显示静态图像、视频和摄像机回馈等基本操作。你还将学习图像处理、视频分析、深度估计和分割,并通过构建一个简单的GUI应用程序获得实践经验。接下来,你将处理两类常见问题:人脸检测和人脸识别。你还将学习物体分类和机器学习的概念,这将使你能够创建和使用物体检测器和分类器,甚至跟踪电影或摄像机回馈中的物体。稍后,你将学习3D跟踪和增强现实。本书末尾,你将学习人工神经网络和深度神经网络,学习如何开发手写数字识别以及对人的性别和年龄分类的应用程序。

图书特色

图书前言

本书内容是关于OpenCV的 Python 绑定的。从经典技术到先进技术,从几何知识到机器学习,读者将学习大量的技术和算法。在构建良好应用程序的过程中,这些内容都有助于解决实际的计算机视觉问题。在使用OpenCV 4和Python 3的过程中,我们所采用的方法既适用于计算机视觉新手,又适用于希望扩展和更新技能的专家。
首先,我们将介绍OpenCV 4,并解释如何基于Python 3在各种平台上安装、设置OpenCV 4。接着将介绍如何执行读取、写入、操纵和显示静态图像、视频以及摄像头回传信号等基本操作。还将介绍图像处理和视频分析,以及深度估计和分割,通过构建简单的GUI应用程序,让读者获得实践技能。接下来,将处理两类主流问题:人脸检测和人脸识别。
随着学习的深入,我们将探索物体分类和机器学习的概念,使读者能够创建和使用物体检测器及分类器,甚至跟踪电影或者摄像头回传信号中的物体。随后我们将工作扩展到3D跟踪和增强现实。最后,在开发识别手写数字的应用程序并对人的性别和年龄进行分类时,我们将学习人工神经网络(Artificial Neural Network,ANN)和深度神经网络(Deep Neural Network,DNN)。
读完本书,你将获得正确的知识和技能,以着手实际的计算机视觉项目。
目标读者
本书是为那些对计算机视觉、机器学习以及OpenCV在真实场景中的应用感兴趣的读者编写的,无论是计算机视觉新手,还是那些希望跟进OpenCV 4和Python 3的专家,都非常适合阅读本书。读者应该熟悉基本的Python编程知识,但是不需要具备图像处理、计算机视觉或机器学习的先验知识。
本书内容
第1章解释如何基于Python 3在各种平台上安装OpenCV 4。本章还提供了常见问题的处理步骤。
第2章介绍OpenCV的I/O功能。本章还讨论了GUI项目的面向对象设计,我们将在其他章节中对该GUI项目进一步开发。
第3章介绍一些转换图像所需的技术,如颜色处理、图像锐化、物体轮廓标记以及几何形状检测。
第4章展示如何使用来自深度摄像头的数据识别前景和背景区域,以将效果限制在前景或背景。
第5章介绍基于OpenCV的一些人脸检测和识别功能,以及定义特定类型的可检测物体的数据文件。
第6章展示如何在OpenCV的帮助下描述图像的特征,以及如何利用特征进行图像匹配和搜索。
第7章结合计算机视觉和机器学习算法来定位和分类图像中的物体。本章还展示了如何使用OpenCV实现这种算法组合。
第8章演示跟踪和预测视频或实时摄像头中人和物体运动的方法。
第9章将构建一个增强现实应用程序,使用摄像头、物体和运动的信息,实时地将3D图形叠加到跟踪的物体上。
第10章介绍OpenCV中的人工神经网络和深度神经网络,并说明这些内容在实际应用中的用法。
附录描述颜色曲线的概念以及利用SciPy对其进行的实现。
最佳配置
读者至少要熟练掌握Python编程语言的基本知识。推荐使用Windows、macOS或Linux开发机。你可以参考第1章中关于安装OpenCV 4、Python 3以及其他依赖项的说明。
本书采用实践教学方法,包括77个示例脚本以及示例数据。阅读本书的时候,这些示例将有助于强化概念。
本书的代码是在BSD 3条款开放源码许可下发布的,这与OpenCV本身所使用的许可相同。鼓励读者使用、修改、改进示例程序,甚至发布对这些示例程序的更改。
下载示例代码及彩色图像
本书的示例代码文件及截图、样图和视频文件,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码包也托管在GitHub的https://github.com/PackPublishing/Learning-opencv-4-Computer-Vision-with-Python-Third-Edition处。如果代码有更新,其上代码也会随之更新。
本书约定
文本中的代码体:指示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、用户输入和Twitter句柄。例如“OpenCV提供了VideoCapture和VideoWriter类,它们支持各种视频文件格式”。
代码块示例:

代码块中需关注的部分加粗表示:

通常,命令行输入或输出这样表示:

对于Windows系统,命令行输入或输出这样表示:

表示警告或重要注意点。
表示提示和技巧。

上架指导

计算机\程序设计

封底文字

计算机视觉是一门发展迅速的科学,涵盖了多种应用和技术。这本书不但适用于计算机视觉的初学者,也适用于计算机视觉相关领域的专家。通过学习本书,你将能够利用OpenCV 4和Python 3构建应用程序,将理论应用于实践。
首先,你将了解OpenCV 4,以及如何基于Python 3在各种平台上安装OpenCV 4。然后,你将学习如何执行读取、写入、操纵,以及显示静态图像、视频和摄像头回传信号等基本操作。你还将学习图像处理、视频分析、深度估计和分割,并通过构建GUI应用程序获得实践经验。接下来,你将处理两类常见问题——人脸检测和人脸识别,还将学习物体分类和机器学习的概念,这将使你能够创建和使用物体检测器及分类器,甚至跟踪电影或摄像头回传信号中的物体。稍后,你将学习3D跟踪和增强现实的技能。最后,你将学习人工神经网络和深度神经网络,学习如何开发手写数字识别以及对人的性别和年龄进行分类的应用程序。
学习本书之后,你将拥有完成实际计算机视觉项目所需要的技能。
通过阅读本书,你将能够:
安装并熟悉OpenCV 4的Python 3绑定。
理解图像处理和视频分析的基础知识。
利用深度相机来区分前景和背景区域。
检测和识别物体,并跟踪物体在视频中的运动。
训练和使用自己的模型匹配图像以及分类物体。
检测和识别人脸,并对性别和年龄进行分类。
构建增强现实应用程序来跟踪3D图像。
使用机器学习模型,包括支持向量机、人工神经网络和深度神经网络。

译者序

计算机视觉是利用计算机模拟人类视觉,利用镜头和计算机代替人眼,使计算机拥有人类视觉的能力,对图像和视频中的目标进行分割、分类、识别、跟踪、判别、决策等。计算机视觉是一门交叉学科,涉及的领域包括计算机科学(图形、算法、理论、系统、体系结构)、数学(机器学习、信息检索)、工程学(机器人、语音、自然语言处理、图像处理)、物理学(光学)、生物学(神经科学)和心理学(认知科学)等。计算机视觉的目标是对环境的表达和理解,核心问题是研究如何对输入的图像信息进行组织以及如何对物体和场景进行识别,进而对图像内容进行解释。常见的应用领域包括图像检索和分类、人脸检测和识别、物体跟踪、视频监控、生物识别技术、游戏和控制等。人工神经网络和深度学习的最新研究进展极大地推动了计算机视觉技术的发展。
本书通过大量编程实践案例,全面系统地介绍了计算机视觉及其相关领域的核心内容。全书共10章,包括基于Python 3在各种平台上安装OpenCV 4、文件、OpenCV的I/O功能、摄像头及图形用户界面处理、基于OpenCV的图像处理、深度估计与分割、人脸检测和识别、利用图像描述符进行图像检索和搜索、构建自定义物体检测器、物体跟踪、摄像头模型和增强现实,以及基于OpenCV的神经网络导论等内容。
为了便于读者学习,作者在GitHub上提供了相关案例的完整源代码,供读者下载使用。通过书中提供的案例代码,读者可以快速熟悉和掌握计算机视觉领域的相关知识。本书既适合那些想要从事计算机视觉及其相关领域研发的初学者阅读,也适合那些致力于计算机视觉研究、希望扩展和更新技能的高阶读者阅读。但是对于初次接触计算机视觉及其相关领域的人员来说,在阅读本书前,建议先阅读一下OpenCV 4和Python 3等编程书籍,或者事先学习一下有关OpenCV 4和Python 3编程的在线教程。
本书由重庆邮电大学教师刘冰博士和高级工程师高博历时四个多月的时间翻译完成,同时本书获得了重庆邮电大学博士启动基金(E012A2020215)的支持。为了能够准确地翻译本书,译者查阅了大量有关OpenCV 4、Python 3以及计算机视觉等方面的中外文资料。但因水平有限,译文中难免存在不当之处,恳请读者批评指正。
感谢机械工业出版社华章分社的编辑们,是他们的严格要求,才使本书得以高质量出版。

刘冰  
liubing@cqupt.edu.cn  
2021年3月

图书目录

译者序
前言
作者简介
审校者简介
第1章 安装OpenCV 1
1.1 技术需求 2
1.2 OpenCV 4有哪些新特性 2
1.3 选择和使用合适的安装工具 3
1.3.1 在Windows上安装 3
1.3.2 在macOS上安装 7
1.3.3 在Debian、Ubuntu、Linux Mint以及类似系统上安装 8
1.3.4 在其他类UNIX系统上安装 11
1.4 运行示例 12
1.5 查找文档、帮助和更新 13
1.6 本章小结 13
第2章 处理文件、摄像头和GUI 14
2.1 技术需求 14
2.2 基本I/O脚本 14
2.2.1 读取/写入图像文件 15
2.2.2 在图像和原始字节之间进行转换 17
2.2.3 基于numpy.array访问图像数据 19
2.2.4 读取/写入视频文件 21
2.2.5 捕捉摄像头帧 22
2.2.6 在窗口中显示图像 23
2.2.7 在窗口中显示摄像头帧 24
2.3 项目Cameo(人脸跟踪和图像处理) 25
2.4 Cameo:面向对象的设计 26
2.4.1 基于managers.CaptureManager提取视频流 26
2.4.2 基于managers.WindowManager提取窗口和键盘 30
2.4.3 基于cameo.Cameo应用所有内容 31
2.5 本章小结 33
第3章 基于OpenCV的图像处理 34
3.1 技术需求 34
3.2 在不同颜色模型之间进行图像转换 34
3.3 探索傅里叶变换 35
3.4 创建模块 38
3.5 边缘检测 38
3.6 自定义核:获取卷积 39
3.7 修改应用程序 41
3.8 基于Canny的边缘检测 43
3.9 轮廓检测 43
3.9.1 边框、最小矩形区域以及最小外接圆 44
3.9.2 凸轮廓和Douglas-Peucker算法 46
3.10 检测线、圆以及其他形状 48
3.10.1 检测线 48
3.10.2 检测圆 49
3.10.3 检测其他形状 50
3.11 本章小结 50
第4章 深度估计和分割 51
4.1 技术需求 51
4.2 创建模块 52
4.3 从深度摄像头捕捉帧 52
4.4 将10位图像转换成8位图像 54
4.5 由视差图创建掩模 56
4.6 修改应用程序 57
4.7 基于普通摄像头的深度估计 59
4.8 基于GrabCut算法的前景检测 64
4.9 基于分水岭算法的图像分割 67
4.10 本章小结 69
第5章 人脸检测和识别 70
5.1 技术需求 71
5.2 Haar级联的概念化 71
5.3 获取Haar级联数据 72
5.4 使用OpenCV进行人脸检测 72
5.4.1 在静态图像上进行人脸检测 73
5.4.2 在视频上进行人脸检测 74
5.4.3 进行人脸识别 77
5.5 在红外线下换脸 83
5.5.1 修改应用程序的循环 84
5.5.2 掩模复制操作 86
5.6 本章小结 88
第6章 使用图像描述符检索和搜索图像 89
6.1 技术需求 89
6.2 理解特征检测和匹配的类型 90
6.3 检测Harris角点 90
6.4 检测DoG特征并提取SIFT描述符 92
6.5 检测快速Hessian特征并提取SURF描述符 95
6.6 使用基于FAST特征和BRIEF描述符的ORB 96
6.6.1 FAST 97
6.6.2 BRIEF 97
6.6.3 蛮力匹配 98
6.6.4 匹配两幅图像中的标识 98
6.7 使用K最近邻和比率检验过滤匹配 101
6.8 基于FLANN的匹配 104
6.9 基于FLANN进行单应性匹配 107
6.10 示例应用程序:文身取证 110
6.10.1 将图像描述符保存到文件 110
6.10.2 扫描匹配 111
6.11 本章小结 114
第7章 建立自定义物体检测器 115
7.1 技术需求 115
7.2 理解HOG描述符 116
7.2.1 HOG的可视化 116
7.2.2 使用HOG描述图像的区域 117
7.3 理解非极大值抑制 118
7.4 理解支持向量机 118
7.5 基于HOG描述符检测人 119
7.6 创建并训练物体检测器 122
7.6.1 理解BoW 122
7.6.2 将BoW应用于计算机视觉领域 123
7.6.3 k均值聚类 123
7.7 检测汽车 124
7.7.1 支持向量机和滑动窗口相结合 129
7.7.2 检测场景中的汽车 130
7.7.3 保存并加载经过训练的支持向量机 135
7.8 本章小结 135
第8章 物体跟踪 136
8.1 技术需求 136
8.2 基于背景差分检测运动物体 137
8.2.1 实现基本背景差分器 138
8.2.2 使用MOG背景差分器 140
8.2.3 使用KNN背景差分器 143
8.2.4 使用GMG和其他背景差分器 145
8.3 利用MeanShift和CamShift跟踪彩色物体 147
8.3.1 规划MeanShift示例 148
8.3.2 计算和反投影颜色直方图 148
8.3.3 实现MeanShift示例 152
8.3.4 使用CamShift 153
8.4 使用卡尔曼滤波器寻找运动趋势 155
8.4.1 理解预测和更新阶段 155
8.4.2 跟踪鼠标光标 156
8.5 跟踪行人 158
8.5.1 规划应用程序的流程 158
8.5.2 比较面向对象范式和函数范式 159
8.5.3 实现行人类 160
8.5.4 实现主函数 162
8.5.5 考虑接下来的步骤 165
8.6 本章小结 165
第9章 摄像头模型和增强现实 166
9.1 技术需求 166
9.2 理解3D图像跟踪和增强现实 167
9.2.1 理解摄像头和镜头参数 168
9.2.2 理解cv2.solvePnPRansac 172
9.3 实现demo应用程序 174
9.3.1 导入模块 174
9.3.2 执行灰度转换 175
9.3.3 执行2D到3D的空间转换 176
9.3.4 实现应用程序类 177
9.3.5 运行和测试应用程序 192
9.4 改进3D跟踪算法 195
9.5 本章小结 195
第10章 基于OpenCV的神经网络导论 197
10.1 技术需求 198
10.2 理解人工神经网络 198
10.2.1 理解神经元和感知器 199
10.2.2 理解神经网络的层 200
10.3 用OpenCV训练基本人工神经网络 202
10.4 训练多阶段人工神经网络分类器 203
10.5 基于人工神经网络识别手写数字 207
10.5.1 理解手写数字的MNIST数据库 207
10.5.2 为MNIST数据库选择训练参数 208
10.5.3 实现模块来训练人工神经网络 208
10.5.4 实现简单测试模块 212
10.5.5 实现主模块 212
10.5.6 试着提升人工神经网络训练性能 217
10.5.7 寻找其他潜在应用程序 218
10.6 在OpenCV中使用其他框架的深度神经网络 219
10.7 基于第三方深度神经网络的物体检测和分类 220
10.8 基于第三方深度神经网络的人脸检测和分类 223
10.9 本章小结 228
附录 基于曲线滤波器弯曲颜色空间 229

教学资源推荐
作者: [美]本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup)著
作者: (美)Y. Daniel Liang 著
作者: 夏天
作者: 罗兵 刘艺 孟武生
参考读物推荐
作者: 范长春 著
作者: 戴艳 等编著
作者: 王国辉 等编著