书籍详情
OpenCV 4.0+Python机器学习与计算机视觉实战
作者:[印] 梅努阿·吉沃吉安 等 著,黄进青 译
出版社:清华大学出版社
出版时间:2022-02-01
ISBN:9787302597360
定价:¥109.00
购买这本书可以去
内容简介
《OpenCV 4.0+Python机器学习与计算机视觉实战》详细阐述了机器学习与计算机视觉相关的基本解决方案,主要包括滤镜、深度传感器和手势识别、通过特征匹配和透视变换查找对象、使用运动恢复结构重建3D场景、在OpenCV中使用计算摄影、跟踪视觉上的显著对象、识别交通标志、识别面部表情、对象分类和定位、检测和跟踪对象等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。
作者简介
《OpenCV 4.0+Python机器学习与计算机视觉实战》详细阐述了机器学习与计算机视觉相关的基本解决方案,主要包括滤镜、深度传感器和手势识别、通过特征匹配和透视变换查找对象、使用运动恢复结构重建3D场景、在OpenCV中使用计算摄影、跟踪视觉上的显著对象、识别交通标志、识别面部表情、对象分类和定位、检测和跟踪对象等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。
目录
第1章 滤镜 1
1.1 准备工作 2
1.2 规划应用程序 2
1.3 创建黑白铅笔素描 3
1.3.1 了解使用减淡和加深技术的方法 4
1.3.2 使用二维卷积实现高斯模糊 6
1.3.3 应用铅笔素描变换效果 7
1.3.4 使用高斯模糊的优化版本 9
1.4 生成暖调和冷调滤镜 10
1.4.1 通过曲线平移使用颜色操作 11
1.4.2 使用查找表实现曲线滤镜 11
1.4.3 设计暖调和冷调效果 12
1.5 创建图像卡通化效果 15
1.5.1 使用双边滤镜 16
1.5.2 检测并强调突出的边缘 17
1.5.3 组合颜色和轮廓以创建卡通效果 19
1.6 综合演练 20
1.6.1 运行应用程序 20
1.6.2 映射GUI基类 21
1.6.3 了解GUI构造函数 22
1.6.4 了解基本的GUI布局 23
1.6.5 处理视频流 24
1.6.6 创建自定义滤镜布局 25
1.7 小结 27
1.8 许可 28
第2章 深度传感器和手势识别 29
2.1 准备工作 30
2.2 规划应用程序 30
2.3 设置应用程序 31
2.3.1 访问Kinect 3D传感器 31
2.3.2 使用与OpenNI兼容的传感器 32
2.3.3 运行应用程序和主函数例程 34
2.4 实时跟踪手势 35
2.5 了解手部区域分割 36
2.5.1 找到图像中心区域最突出的深度 36
2.5.2 应用形态学闭合操作平滑蒙版 38
2.5.3 在分割蒙版中查找连接的组件 39
2.6 执行手形分析 41
2.6.1 确定分割之后手部区域的轮廓 41
2.6.2 查找轮廓区域的凸包 41
2.6.3 寻找凸包的凸缺陷 42
2.7 执行手势识别 43
2.7.1 区分凸缺陷的不同原因 44
2.7.2 根据伸出的手指数对手势进行分类 45
2.8 小结 47
第3章 通过特征匹配和透视变换查找对象 49
3.1 准备工作 50
3.2 列出应用程序执行的任务 50
3.3 规划应用程序 52
3.4 设置应用程序 52
3.4.1 运行应用程序 52
3.4.2 显示结果 53
3.5 了解处理流程 54
3.6 学习特征提取 56
3.6.1 特征检测 56
3.6.2 使用SURF检测图像中的特征 57
3.6.3 使用SURF获取特征描述子 58
3.7 了解特征匹配 59
3.7.1 使用FLANN算法匹配图像特征 60
3.7.2 执行比率检验以消除异常值 60
3.7.3 可视化特征匹配 61
3.7.4 映射单应性估计 64
3.7.5 扭曲图像 67
3.8 了解特征跟踪 69
3.9 理解早期异常值检测和剔除 69
3.10 研究算法原理 72
3.11 小结 74
3.12 许可 75
第4章 使用运动恢复结构重建3D场景 77
4.1 准备工作 77
4.2 规划应用程序 78
4.3 了解相机校准知识 81
4.3.1 了解针孔相机模型 81
4.3.2 估算相机内参 83
4.3.3 定义相机校准图形用户界面 84
4.3.4 初始化相机校准算法 84
4.3.5 收集图像和对象点 86
4.3.6 寻找相机矩阵 87
4.4 设置应用程序 88
4.4.1 理解main例程函数 89
4.4.2 实现SceneReconstruction3D类 90
4.5 从一对图像估计相机的运动 92
4.5.1 使用丰富特征描述子应用点匹配 93
4.5.2 使用光流进行点匹配 94
4.5.3 查找相机矩阵 97
4.5.4 应用图像校正 99
4.6 重建场景 101
4.7 了解3D点云可视化 102
4.8 了解运动恢复结构 105
4.9 小结 105
第5章 在OpenCV中使用计算摄影 107
5.1 准备工作 107
5.2 规划应用程序 107
5.3 了解8位问题 108
5.3.1 了解RAW图像 110
5.3.2 使用伽玛校正 111
5.4 了解高动态范围成像 115
5.4.1 探索改变曝光度的方法 118
5.4.2 快门速度 119
5.4.3 光圈 119
5.4.4 ISO感光度 120
5.4.5 使用多重曝光图像生成HDR图像 120
5.4.6 从图像中提取曝光强度值 122
5.4.7 估计相机响应函数 123
5.4.8 使用OpenCV编写HDR脚本 124
5.4.9 显示HDR图像 125
5.5 了解全景拼接 126
5.5.1 编写脚本参数并过滤图像 126
5.5.2 计算相对位置和最终图片尺寸 128
5.5.3 查找相机参数 128
5.5.4 为全景图创建画布 129
5.5.5 将图像合并在一起 129
5.5.6 改善全景拼接 131
5.6 小结 131
5.7 延伸阅读 131
5.8 许可 132
第6章 跟踪视觉上的显著对象 133
6.1 准备工作 133
6.2 了解视觉显著性 134
6.3 规划应用程序 135
6.4 设置应用程序 136
6.4.1 实现main函数 136
6.4.2 了解MultiObjectTracker类 137
6.5 映射视觉显著性 138
6.5.1 了解傅里叶分析 140
6.5.2 了解自然场景统计 142
6.5.3 使用频谱残差法生成显著图 145
6.5.4 检测场景中的原型对象 148
6.6 了解均值漂移跟踪 149
6.7 自动跟踪足球场上的所有球员 151
6.8 了解OpenCV跟踪API 154
6.9 综合演练 157
6.10 小结 158
6.11 数据集许可 158
第7章 识别交通标志 159
7.1 准备工作 160
7.2 规划应用程序 160
7.3 监督学习概念简介 161
7.3.1 训练过程 161
7.3.2 测试过程 163
7.4 探索GTSRB数据集 164
7.5 解析数据集 166
7.6 了解数据集特征提取 169
7.6.1 理解常见的预处理 170
7.6.2 了解灰度特征 171
7.6.3 理解色彩空间 172
7.6.4 使用SURF描述子 172
7.6.5 映射HOG描述子 173
7.7 关于SVM 175
7.7.1 使用SVM进行多类分类 176
7.7.2 训练SVM 177
7.7.3 测试SVM 178
7.7.4 准确率 179
7.7.5 混淆矩阵 180
7.7.6 精确率 181
7.7.7 召回率 183
7.8 综合演练 185
7.9 使用神经网络改善结果 187
7.10 小结 188
7.11 数据集许可 189
第8章 识别面部表情 191
8.1 准备工作 191
8.2 规划应用程序 192
8.3 了解人脸检测 194
8.3.1 了解基于Haar的级联分类器 194
8.3.2 理解预训练的级联分类器 195
8.3.3 使用预先训练的级联分类器 196
8.3.4 理解FaceDetector类 198
8.3.5 在灰度图像中检测脸部 199
8.3.6 预处理检测到的脸部 200
8.3.7 检测眼睛部位 201
8.3.8 变换脸部 202
8.4 收集数据 203
8.4.1 收集训练数据集 203
8.4.2 运行应用程序 204
8.4.3 实现数据收集器的图形用户界面 205
8.4.4 扩充基本布局 206
8.4.5 处理当前帧 208
8.4.6 存储数据 208
8.5 理解面部表情识别 210
8.5.1 处理数据集 210
8.5.2 了解PCA 211
8.5.3 理解MLP 213
8.5.4 理解感知器 213
8.5.5 了解深度架构 215
8.5.6 制作用于面部表情识别的MLP 217
8.5.7 训练MLP 219
8.5.8 测试MLP 220
8.5.9 运行脚本 220
8.6 综合演练 221
8.7 小结 224
8.8 参考资料 224
8.9 许可 225
第9章 对象分类和定位 227
9.1 准备工作 228
9.2 规划应用程序 228
9.3 准备推理脚本 228
9.4 准备数据集 230
9.4.1 下载并解析数据集 230
9.4.2 创建一个TensorFlow数据集 233
9.5 使用卷积神经网络分类 236
9.5.1 理解卷积神经网络 236
9.5.2 了解迁移学习 237
9.5.3 准备宠物类型和品种的分类器 239
9.5.4 训练和评估分类器网络 240
9.6 使用卷积神经网络进行定位 242
9.6.1 准备定位器模型 243
9.6.2 理解反向传播算法 245
9.6.3 训练模型 247
9.7 推理的实际应用 248
9.8 小结 249
9.9 数据集许可 249
第10章 检测和跟踪对象 251
10.1 准备工作 252
10.2 规划应用程序 252
10.3 准备主脚本 252
10.4 使用SSD模型检测对象 254
10.5 使用其他检测器 257
10.6 了解对象检测器 260
10.6.1 单对象检测器 260
10.6.2 滑动窗口方法 260
10.6.3 单遍检测器 261
10.6.4 了解交并比 263
10.6.5 训练SSD和YOLO式网络 264
10.7 跟踪检测到的对象 265
10.7.1 实现SORT跟踪器 267
10.7.2 理解卡尔曼滤波器 267
10.7.3 结合使用边界框跟踪器和卡尔曼滤波器 271
10.7.4 将边界框转换为观察值 272
10.7.5 实现卡尔曼滤波器 273
10.7.6 将检测结果与跟踪器关联在一起 276
10.7.7 定义跟踪器的类 277
10.8 查看程序的实际应用效果 279
10.9 小结 280
附录A 应用程序性能分析和加速 281
A.1 用Numba加速 282
A.2 通过CPU加速 284
A.3 理解Numba、CUDA和GPU加速 286
附录B 设置Docker容器 289
B.1 定义Dockerfile 289
B.2 使用GPU 293
1.1 准备工作 2
1.2 规划应用程序 2
1.3 创建黑白铅笔素描 3
1.3.1 了解使用减淡和加深技术的方法 4
1.3.2 使用二维卷积实现高斯模糊 6
1.3.3 应用铅笔素描变换效果 7
1.3.4 使用高斯模糊的优化版本 9
1.4 生成暖调和冷调滤镜 10
1.4.1 通过曲线平移使用颜色操作 11
1.4.2 使用查找表实现曲线滤镜 11
1.4.3 设计暖调和冷调效果 12
1.5 创建图像卡通化效果 15
1.5.1 使用双边滤镜 16
1.5.2 检测并强调突出的边缘 17
1.5.3 组合颜色和轮廓以创建卡通效果 19
1.6 综合演练 20
1.6.1 运行应用程序 20
1.6.2 映射GUI基类 21
1.6.3 了解GUI构造函数 22
1.6.4 了解基本的GUI布局 23
1.6.5 处理视频流 24
1.6.6 创建自定义滤镜布局 25
1.7 小结 27
1.8 许可 28
第2章 深度传感器和手势识别 29
2.1 准备工作 30
2.2 规划应用程序 30
2.3 设置应用程序 31
2.3.1 访问Kinect 3D传感器 31
2.3.2 使用与OpenNI兼容的传感器 32
2.3.3 运行应用程序和主函数例程 34
2.4 实时跟踪手势 35
2.5 了解手部区域分割 36
2.5.1 找到图像中心区域最突出的深度 36
2.5.2 应用形态学闭合操作平滑蒙版 38
2.5.3 在分割蒙版中查找连接的组件 39
2.6 执行手形分析 41
2.6.1 确定分割之后手部区域的轮廓 41
2.6.2 查找轮廓区域的凸包 41
2.6.3 寻找凸包的凸缺陷 42
2.7 执行手势识别 43
2.7.1 区分凸缺陷的不同原因 44
2.7.2 根据伸出的手指数对手势进行分类 45
2.8 小结 47
第3章 通过特征匹配和透视变换查找对象 49
3.1 准备工作 50
3.2 列出应用程序执行的任务 50
3.3 规划应用程序 52
3.4 设置应用程序 52
3.4.1 运行应用程序 52
3.4.2 显示结果 53
3.5 了解处理流程 54
3.6 学习特征提取 56
3.6.1 特征检测 56
3.6.2 使用SURF检测图像中的特征 57
3.6.3 使用SURF获取特征描述子 58
3.7 了解特征匹配 59
3.7.1 使用FLANN算法匹配图像特征 60
3.7.2 执行比率检验以消除异常值 60
3.7.3 可视化特征匹配 61
3.7.4 映射单应性估计 64
3.7.5 扭曲图像 67
3.8 了解特征跟踪 69
3.9 理解早期异常值检测和剔除 69
3.10 研究算法原理 72
3.11 小结 74
3.12 许可 75
第4章 使用运动恢复结构重建3D场景 77
4.1 准备工作 77
4.2 规划应用程序 78
4.3 了解相机校准知识 81
4.3.1 了解针孔相机模型 81
4.3.2 估算相机内参 83
4.3.3 定义相机校准图形用户界面 84
4.3.4 初始化相机校准算法 84
4.3.5 收集图像和对象点 86
4.3.6 寻找相机矩阵 87
4.4 设置应用程序 88
4.4.1 理解main例程函数 89
4.4.2 实现SceneReconstruction3D类 90
4.5 从一对图像估计相机的运动 92
4.5.1 使用丰富特征描述子应用点匹配 93
4.5.2 使用光流进行点匹配 94
4.5.3 查找相机矩阵 97
4.5.4 应用图像校正 99
4.6 重建场景 101
4.7 了解3D点云可视化 102
4.8 了解运动恢复结构 105
4.9 小结 105
第5章 在OpenCV中使用计算摄影 107
5.1 准备工作 107
5.2 规划应用程序 107
5.3 了解8位问题 108
5.3.1 了解RAW图像 110
5.3.2 使用伽玛校正 111
5.4 了解高动态范围成像 115
5.4.1 探索改变曝光度的方法 118
5.4.2 快门速度 119
5.4.3 光圈 119
5.4.4 ISO感光度 120
5.4.5 使用多重曝光图像生成HDR图像 120
5.4.6 从图像中提取曝光强度值 122
5.4.7 估计相机响应函数 123
5.4.8 使用OpenCV编写HDR脚本 124
5.4.9 显示HDR图像 125
5.5 了解全景拼接 126
5.5.1 编写脚本参数并过滤图像 126
5.5.2 计算相对位置和最终图片尺寸 128
5.5.3 查找相机参数 128
5.5.4 为全景图创建画布 129
5.5.5 将图像合并在一起 129
5.5.6 改善全景拼接 131
5.6 小结 131
5.7 延伸阅读 131
5.8 许可 132
第6章 跟踪视觉上的显著对象 133
6.1 准备工作 133
6.2 了解视觉显著性 134
6.3 规划应用程序 135
6.4 设置应用程序 136
6.4.1 实现main函数 136
6.4.2 了解MultiObjectTracker类 137
6.5 映射视觉显著性 138
6.5.1 了解傅里叶分析 140
6.5.2 了解自然场景统计 142
6.5.3 使用频谱残差法生成显著图 145
6.5.4 检测场景中的原型对象 148
6.6 了解均值漂移跟踪 149
6.7 自动跟踪足球场上的所有球员 151
6.8 了解OpenCV跟踪API 154
6.9 综合演练 157
6.10 小结 158
6.11 数据集许可 158
第7章 识别交通标志 159
7.1 准备工作 160
7.2 规划应用程序 160
7.3 监督学习概念简介 161
7.3.1 训练过程 161
7.3.2 测试过程 163
7.4 探索GTSRB数据集 164
7.5 解析数据集 166
7.6 了解数据集特征提取 169
7.6.1 理解常见的预处理 170
7.6.2 了解灰度特征 171
7.6.3 理解色彩空间 172
7.6.4 使用SURF描述子 172
7.6.5 映射HOG描述子 173
7.7 关于SVM 175
7.7.1 使用SVM进行多类分类 176
7.7.2 训练SVM 177
7.7.3 测试SVM 178
7.7.4 准确率 179
7.7.5 混淆矩阵 180
7.7.6 精确率 181
7.7.7 召回率 183
7.8 综合演练 185
7.9 使用神经网络改善结果 187
7.10 小结 188
7.11 数据集许可 189
第8章 识别面部表情 191
8.1 准备工作 191
8.2 规划应用程序 192
8.3 了解人脸检测 194
8.3.1 了解基于Haar的级联分类器 194
8.3.2 理解预训练的级联分类器 195
8.3.3 使用预先训练的级联分类器 196
8.3.4 理解FaceDetector类 198
8.3.5 在灰度图像中检测脸部 199
8.3.6 预处理检测到的脸部 200
8.3.7 检测眼睛部位 201
8.3.8 变换脸部 202
8.4 收集数据 203
8.4.1 收集训练数据集 203
8.4.2 运行应用程序 204
8.4.3 实现数据收集器的图形用户界面 205
8.4.4 扩充基本布局 206
8.4.5 处理当前帧 208
8.4.6 存储数据 208
8.5 理解面部表情识别 210
8.5.1 处理数据集 210
8.5.2 了解PCA 211
8.5.3 理解MLP 213
8.5.4 理解感知器 213
8.5.5 了解深度架构 215
8.5.6 制作用于面部表情识别的MLP 217
8.5.7 训练MLP 219
8.5.8 测试MLP 220
8.5.9 运行脚本 220
8.6 综合演练 221
8.7 小结 224
8.8 参考资料 224
8.9 许可 225
第9章 对象分类和定位 227
9.1 准备工作 228
9.2 规划应用程序 228
9.3 准备推理脚本 228
9.4 准备数据集 230
9.4.1 下载并解析数据集 230
9.4.2 创建一个TensorFlow数据集 233
9.5 使用卷积神经网络分类 236
9.5.1 理解卷积神经网络 236
9.5.2 了解迁移学习 237
9.5.3 准备宠物类型和品种的分类器 239
9.5.4 训练和评估分类器网络 240
9.6 使用卷积神经网络进行定位 242
9.6.1 准备定位器模型 243
9.6.2 理解反向传播算法 245
9.6.3 训练模型 247
9.7 推理的实际应用 248
9.8 小结 249
9.9 数据集许可 249
第10章 检测和跟踪对象 251
10.1 准备工作 252
10.2 规划应用程序 252
10.3 准备主脚本 252
10.4 使用SSD模型检测对象 254
10.5 使用其他检测器 257
10.6 了解对象检测器 260
10.6.1 单对象检测器 260
10.6.2 滑动窗口方法 260
10.6.3 单遍检测器 261
10.6.4 了解交并比 263
10.6.5 训练SSD和YOLO式网络 264
10.7 跟踪检测到的对象 265
10.7.1 实现SORT跟踪器 267
10.7.2 理解卡尔曼滤波器 267
10.7.3 结合使用边界框跟踪器和卡尔曼滤波器 271
10.7.4 将边界框转换为观察值 272
10.7.5 实现卡尔曼滤波器 273
10.7.6 将检测结果与跟踪器关联在一起 276
10.7.7 定义跟踪器的类 277
10.8 查看程序的实际应用效果 279
10.9 小结 280
附录A 应用程序性能分析和加速 281
A.1 用Numba加速 282
A.2 通过CPU加速 284
A.3 理解Numba、CUDA和GPU加速 286
附录B 设置Docker容器 289
B.1 定义Dockerfile 289
B.2 使用GPU 293
猜您喜欢