译者序
前言
作者简介
审校者简介
第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