本书结合C++和OpenCV全面讲解计算机视觉编程,不仅涵盖计算机视觉和图像处理的基础知识,而且通过完整示例讲解OpenCV的重要类和函数。主要内容包括OpenCV库的安装和部署、图像增强、像素操作、图形分析等各种技术,并且详细介绍了如何处理来自文件或摄像机的视频,以及如何检测和跟踪移动对象。
第3版针对OpenCV新版本进行了修改,调整了很多函数和算法说明,还增加了立体图像深度检测、运动目标跟踪、人脸识别、人脸定位、行人检测等内容,适合计算机视觉新手、专业软件开发人员、学生,以及所有想要了解图像处理和计算机视觉技术的人员学习参考。
作为人工智能的“眼睛”,计算机视觉技术一直备受关注,辅助驾驶、视频监控等相关应用也越来越多。流行的开源程序库OpenCV无疑是开发智能计算机视觉程序的****。它包含500多个用于图像和视频分析的优化算法,2013年升级的OpenCV 3版本在易用性上也有了极大提升。
本书系统介绍OpenCV 3,带领读者由浅入深地了解如何开发计算机视觉程序。作者从构建可以读取并显示图像的简单应用开始,解释和探讨了图形和图像识别的具体方法,对机器学习和目标识别等当前流行的主题也有介绍。
本书主要内容包括:
OpenCV库基本结构
通过操作像素处理图像
用直方图分析图像
将图像分割成同质区域,并提取有意义的物体
使用图像滤波技术提高图像品质
利用图像几何学,建立同一场景不同视角的对应关系
根据图像的不同视角标定相机
使用机器学习技术检测图像中的行人和物体
根据多个图像重构三维场景
Robert Laganière,加拿大渥太华大学电气工程与计算机科学学院教授,并在VIVA实验室执教。曾获得基于内容的视频分析、视觉监控、驾驶辅助、目标识别与跟踪等领域的多项专利。Visual Cortek公司创始人,Cognivue、iWatchlife、Tempo Analytics等多家初创公司的科学家。
第 1章 图像编程入门 1
1.1 简介 1
1.2 安装OpenCV库 1
1.2.1 准备工作 1
1.2.2 如何实现 2
1.2.3 实现原理 4
1.2.4 扩展阅读 5
1.2.5 参阅 6
1.3 装载、显示和存储图像 6
1.3.1 准备工作 6
1.3.2 如何实现 6
1.3.3 实现原理 8
1.3.4 扩展阅读 9
1.3.5 参阅 11
1.4 深入了解cv::Mat 11
1.4.1 如何实现 11
1.4.2 实现原理 13
1.4.3 扩展阅读 16
1.4.4 参阅 17
1.5 定义感兴趣区域 17
1.5.1 准备工作 17
1.5.2 如何实现 17
1.5.3 实现原理 18
1.5.4 扩展阅读 18
1.5.5 参阅 19
第 2 章 操作像素 20
2.1 简介 20
2.2 访问像素值 21
2.2.1 准备工作 21
2.2.2 如何实现 21
2.2.3 实现原理 23
2.2.4 扩展阅读 24
2.2.5 参阅 24
2.3 用指针扫描图像 24
2.3.1 准备工作 25
2.3.2 如何实现 25
2.3.3 实现原理 26
2.3.4 扩展阅读 27
2.3.5 参阅 31
2.4 用迭代器扫描图像 31
2.4.1 准备工作 31
2.4.2 如何实现 31
2.4.3 实现原理 32
2.4.4 扩展阅读 33
2.4.5 参阅 33
2.5 编写高效的图像扫描循环 33
2.5.1 如何实现 34
2.5.2 实现原理 34
2.5.3 扩展阅读 36
2.5.4 参阅 36
2.6 扫描图像并访问相邻像素 36
2.6.1 准备工作 36
2.6.2 如何实现 36
2.6.3 实现原理 38
2.6.4 扩展阅读 38
2.6.5 参阅 39
2.7 实现简单的图像运算 39
2.7.1 准备工作 39
2.7.2 如何实现 40
2.7.3 实现原理 40
2.7.4 扩展阅读 41
2.8 图像重映射 42
2.8.1 如何实现 42
2.8.2 实现原理 43
2.8.3 参阅 44
第3 章 处理图像的颜色 45
3.1 简介 45
3.2 用策略设计模式比较颜色 45
3.2.1 如何实现 46
3.2.2 实现原理 47
3.2.3 扩展阅读 50
3.2.4 参阅 53
3.3 用GrabCut 算法分割图像 53
3.3.1 如何实现 54
3.3.2 实现原理 56
3.3.3 参阅 56
3.4 转换颜色表示法 56
3.4.1 如何实现 57
3.4.2 实现原理 58
3.4.3 参阅 59
3.5 用色调、饱和度和亮度表示颜色 59
3.5.1 如何实现 59
3.5.2 实现原理 61
3.5.3 拓展阅读 64
3.5.4 参阅 66
第4 章 用直方图统计像素 67
4.1 简介 67
4.2 计算图像直方图 67
4.2.1 准备工作 68
4.2.2 如何实现 68
4.2.3 实现原理 72
4.2.4 扩展阅读 72
4.2.5 参阅 74
4.3 利用查找表修改图像外观 74
4.3.1 如何实现 74
4.3.2 实现原理 75
4.3.3 扩展阅读 76
4.3.4 参阅 78
4.4 直方图均衡化 78
4.4.1 如何实现 78
4.4.2 实现原理 79
4.5 反向投影直方图检测特定图像内容 79
4.5.1 如何实现 80
4.5.2 实现原理 81
4.5.3 扩展阅读 82
4.5.4 参阅 84
4.6 用均值平移算法查找目标 85
4.6.1 如何实现 85
4.6.2 实现原理 87
4.6.3 参阅 88
4.7 比较直方图搜索相似图像 88
4.7.1 如何实现 88
4.7.2 实现原理 90
4.7.3 参阅 90
4.8 用积分图像统计像素 91
4.8.1 如何实现 91
4.8.2 实现原理 92
4.8.3 扩展阅读 93
4.8.4 参阅 99
第5 章 用形态学运算变换图像 100
5.1 简介 100
5.2 用形态学滤波器腐蚀和膨胀图像 100
5.2.1 准备工作 101
5.2.2 如何实现 101
5.2.3 实现原理 102
5.2.4 扩展阅读 103
5.2.5 参阅 104
5.3 用形态学滤波器开启和闭合图像 104
5.3.1 如何实现 104
5.3.2 实现原理 105
5.3.3 参阅 106
5.4 在灰度图像中应用形态学运算 106
5.4.1 如何实现 106
5.4.2 实现原理 107
5.4.3 参阅 108
5.5 用分水岭算法实现图像分割 108
5.5.1 如何实现 109
5.5.2 实现原理 111
5.5.3 扩展阅读 112
5.5.4 参阅 114
5.6 用MSER 算法提取特征区域 114
5.6.1 如何实现 114
5.6.2 实现原理 116
5.6.3 参阅 118
第6 章 图像滤波 119
6.1 简介 119
6.2 低通滤波器 120
6.2.1 如何实现 120
6.2.2 实现原理 121
6.2.3 参阅 123
6.3 用滤波器进行缩减像素采样 124
6.3.1 如何实现 124
6.3.2 实现原理 125
6.3.3 扩展阅读 126
6.3.4 参阅 127
6.4 中值滤波器 128
6.4.1 如何实现 128
6.4.2 实现原理 129
6.5 用定向滤波器检测边缘 129
6.5.1 如何实现 130
6.5.2 实现原理 132
6.5.3 扩展阅读 135
6.5.4 参阅 136
6.6 计算拉普拉斯算子 136
6.6.1 如何实现 137
6.6.2 实现原理 138
6.6.3 扩展阅读 141
6.6.4 参阅 142
第7 章 提取直线、轮廓和区域 143
7.1 简介 143
7.2 用Canny 算子检测图像轮廓 143
7.2.1 如何实现 143
7.2.2 实现原理 145
7.2.3 参阅 146
7.3 用霍夫变换检测直线 146
7.3.1 准备工作 146
7.3.2 如何实现 147
7.3.3 实现原理 151
7.3.4 扩展阅读 153
7.3.5 参阅 155
7.4 点集的直线拟合 155
7.4.1 如何实现 155
7.4.2 实现原理 157
7.4.3 扩展阅读 158
7.5 提取连续区域 158
7.5.1 如何实现 159
7.5.2 实现原理 160
7.5.3 扩展阅读 161
7.6 计算区域的形状描述子 161
7.6.1 如何实现 162
7.6.2 实现原理 163
7.6.3 扩展阅读 164
第8 章 检测兴趣点 166
8.1 简介 166
8.2 检测图像中的角点 166
8.2.1 如何实现 167
8.2.2 实现原理 171
8.2.3 扩展阅读 172
8.2.4 参阅 174
8.3 快速检测特征 174
8.3.1 如何实现 174
8.3.2 实现原理 175
8.3.3 扩展阅读 176
8.3.4 参阅 178
8.4 尺度不变特征的检测 178
8.4.1 如何实现 179
8.4.2 实现原理 180
8.4.3 扩展阅读 181
8.4.4 参阅 183
8.5 多尺度FAST 特征的检测 183
8.5.1 如何实现 183
8.5.2 实现原理 184
8.5.3 扩展阅读 185
8.5.4 参阅 186
第9 章 描述和匹配兴趣点 187
9.1 简介 187
9.2 局部模板匹配 187
9.2.1 如何实现 188
9.2.2 实现原理 190
9.2.3 扩展阅读 191
9.2.4 参阅 192
9.3 描述并匹配局部强度值模式 192
9.3.1 如何实现 193
9.3.2 实现原理 195
9.3.3 扩展阅读 196
9.3.4 参阅 199
9.4 用二值描述子匹配关键点 199
9.4.1 如何实现 199
9.4.2 实现原理 200
9.4.3 扩展阅读 201
9.4.4 参阅 202
第 10 章 估算图像之间的投影关系 203
10.1 简介 203
10.2 计算图像对的基础矩阵 205
10.2.1 准备工作 205
10.2.2 如何实现 206
10.2.3 实现原理 208
10.2.4 参阅 209
10.3 用RANSAC(随机抽样一致性)算法匹配图像 209
10.3.1 如何实现 209
10.3.2 实现原理 212
10.3.3 扩展阅读 213
10.4 计算两幅图像之间的单应矩阵 214
10.4.1 准备工作 214
10.4.2 如何实现 215
10.4.3 实现原理 217
10.4.4 扩展阅读 218
10.4.5 参阅 219
10.5 检测图像中的平面目标 219
10.5.1 如何实现 219
10.5.2 实现原理 221
10.5.3 参阅 224
第 11 章 三维重建 225
11.1 简介 225
11.2 相机标定 226
11.2.1 如何实现 227
11.2.2 实现原理 230
11.2.3 扩展阅读 232
11.2.4 参阅 233
11.3 相机姿态还原 233
11.3.1 如何实现 233
11.3.2 实现原理 235
11.3.3 扩展阅读 236
11.3.4 参阅 238
11.4 用标定相机实现三维重建 238
11.4.1 如何实现 238
11.4.2 实现原理 241
11.4.3 扩展阅读 243
11.4.4 参阅 244
11.5 计算立体图像的深度 244
11.5.1 准备工作 244
11.5.2 如何实现 245
11.5.3 实现原理 247
11.5.4 参阅 247
第 12 章 处理视频序列 248
12.1 简介 248
12.2 读取视频序列 248
12.2.1 如何实现 248
12.2.2 实现原理 250
12.2.3 扩展阅读 251
12.2.4 参阅 251
12.3 处理视频帧 251
12.3.1 如何实现 251
12.3.2 实现原理 252
12.3.3 扩展阅读 256
12.3.4 参阅 258
12.4 写入视频帧 258
12.4.1 如何实现 259
12.4.2 实现原理 259
12.4.3 扩展阅读 262
12.4.4 参阅 263
12.5 提取视频中的前景物体 263
12.5.1 如何实现 264
12.5.2 实现原理 266
12.5.3 扩展阅读 266
12.5.4 参阅 268
第 13 章 跟踪运动目标 269
13.1 简介 269
13.2 跟踪视频中的特征点 269
13.2.1 如何实现 269
13.2.2 实现原理 274
13.2.3 参阅 274
13.3 估算光流 275
13.3.1 准备工作 275
13.3.2 如何实现 276
13.3.3 实现原理 278
13.3.4 参阅 279
13.4 跟踪视频中的物体 279
13.4.1 如何实现 279
13.4.2 实现原理 282
13.4.3 参阅 284
第 14 章 实用案例 285
14.1 简介 285
14.2 人脸识别 286
14.2.1 如何实现 286
14.2.2 实现原理 288
14.2.3 参阅 290
14.3 人脸定位 291
14.3.1 准备工作 291
14.3.2 如何实现 292
14.3.3 实现原理 295
14.3.4 扩展阅读 297
14.3.5 参阅 298
14.4 行人检测 298
14.4.1 准备工作 298
14.4.2 如何实现 299
14.4.3 实现原理 302
14.4.4 扩展阅读 304
14.4.5 参阅 308