本书基于面向 Python 的 OpenCV(OpenCV for Python),介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线,并对细节进行补充和说明。 书中不仅介绍了 OpenCV 函数的使用方法,还介绍了函数实现的算法原理。在介绍 OpenCV 函数的 使用方法时,提供了大量的程序示例。而且在介绍函数对图像的处理前,往往先展示函数对数值、数组 的处理,方便读者从数值的角度观察和理解函数的处理过程和结果。在介绍具体的算法原理时,本书尽 量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用过多复杂抽象的公式。 本书适合计算机视觉领域的初学者阅读,包括在校学生、教师、专业技术人员、图像处理爱好者。
李立宗,南开大学硕士,天津职业技术师范大学副教授,从事计算机视觉领域的教学和科研工作。拥有发明专利一项、软件著作权十余项,公开发表论文十余篇,主编《OpenCV编程案例详解》等多部图书。在网易云课堂主讲的《OpenCV图穷匕见》等多门课程被评为精品课。
第1章 OPENCV入门 1
1.1 如何使用 1
1.2 图像处理基本操作 3
1.2.1 读取图像 3
1.2.2 显示图像 5
1.2.3 保存图像 9
1.3 OpenCV贡献库 10
第2章 图像处理基础 11
2.1 图像的基本表示方法 11
2.2 像素处理 15
2.3 使用numpy.array访问像素 23
2.4 感兴趣区域(ROI) 29
2.5 通道操作 32
2.5.1 通道拆分 32
2.5.2 通道合并 34
2.6 获取图像属性 36
第3章 图像运算 37
3.1 图像加法运算 37
3.1.1 加号运算符 37
3.1.2 cv2.add()函数 38
3.2 图像加权和 40
3.3 按位逻辑运算 43
3.3.1 按位与运算 43
3.3.2 按位或运算 46
3.3.3 按位非运算 47
3.3.4 按位异或运算 48
3.4 掩模 49
3.5 图像与数值的运算 52
3.6 位平面分解 53
3.7 图像加密和解密 59
3.8 数字水印 63
3.8.1 原理 64
3.8.2 实现方法 66
3.8.3 例题 73
3.9 脸部打码及解码 74
第4章 色彩空间类型转换 77
4.1 色彩空间基础 77
4.1.1 GRAY色彩空间 77
4.1.2 XYZ色彩空间 78
4.1.3 YCrCb色彩空间 78
4.1.4 HSV色彩空间 79
4.1.5 HLS色彩空间 80
4.1.6 CIEL*a*b*色彩空间 80
4.1.7 CIEL*u*v*色彩空间 81
4.1.8 Bayer色彩空间 82
4.2 类型转换函数 82
4.3 类型转换实例 88
4.3.1 通过数组观察转换效果 88
4.3.2 图像处理实例 92
4.4 HSV色彩空间讨论 93
4.4.1 基础知识 93
4.4.2 获取指定颜色 95
4.4.3 标记指定颜色 96
4.4.4 标记肤色 100
4.4.5 实现艺术效果 101
4.5 alpha通道 102
第5章 几何变换 106
5.1 缩放 106
5.2 翻转 110
5.3 仿射 111
5.3.1 平移 112
5.3.2 旋转 113
5.3.3 更复杂的仿射变换 114
5.4 透视 115
5.5 重映射 117
5.5.1 映射参数的理解 117
5.5.2 复制 119
5.5.3 绕x轴翻转 121
5.5.4 绕y轴翻转 122
5.5.5 绕x轴、y轴翻转 124
5.5.6 x轴、y轴互换 126
5.5.7 图像缩放 128
第6章 阈值处理 130
6.1 threshold函数 130
6.1.1 二值化阈值处理(cv2.THRESH_BINARY) 131
6.1.2 反二值化阈值处理(cv2.THRESH_BINARY_INV) 133
6.1.3 截断阈值化处理(cv2.THRESH_TRUNC) 135
6.1.4 超阈值零处理(cv2.THRESH_TOZERO_INV) 136
6.1.5 低阈值零处理(cv2.THRESH_TOZERO) 138
6.2 自适应阈值处理 139
6.3 Otsu处理 141
第7章 图像平滑处理 144
7.1 均值滤波 146
7.1.1 基本原理 146
7.1.2 函数语法 150
7.1.3 程序示例 150
7.2 方框滤波 152
7.2.1 基本原理 152
7.2.2 函数语法 153
7.2.3 程序示例 154
7.3 高斯滤波 156
7.3.1 基本原理 156
7.3.2 函数语法 158
7.3.3 程序示例 159
7.4 中值滤波 159
7.4.1 基本原理 160
7.4.2 函数语法 161
7.4.3 程序示例 161
7.5 双边滤波 162
7.5.1 基本原理 162
7.5.2 函数语法 164
7.5.3 程序示例 164
7.6 2D卷积 166
第8章 形态学操作 168
8.1 腐蚀 168
8.2 膨胀 173
8.3 通用形态学函数 178
8.4 开运算 179
8.5 闭运算 180
8.6 形态学梯度运算 182
8.7 礼帽运算 183
8.8 黑帽运算 185
8.9 核函数 186
第9章 图像梯度 189
9.1 Sobel理论基础 189
9.2 Sobel算子及函数使用 191
9.2.1 参数ddepth 192
9.2.2 方向 195
9.2.3 实例 196
9.3 Scharr算子及函数使用 200
9.4 Sobel算子和Scharr算子的比较 204
9.5 Laplacian算子及函数使用 206
9.6 算子总结 208
第10章 CANNY边缘检测 209
10.1 Canny边缘检测基础 209
10.2 Canny函数及使用 213
第11章 图像金字塔 215
11.1 理论基础 215
11.2 pyrDown函数及使用 217
11.3 pyrUp函数及使用 219
11.4 采样可逆性的研究 220
11.5 拉普拉斯金字塔 223
11.5.1 定义 223
11.5.2 应用 225
第12章 图像轮廓 229
12.1 查找并绘制轮廓 229
12.1.1 查找图像轮廓:findContours函数 229
12.1.2 绘制图像轮廓:drawContours函数 237
12.1.3 轮廓实例 238
12.2 矩特征 240
12.2.1 矩的计算:moments函数 241
12.2.2 计算轮廓的面积:contourArea函数 243
12.2.3 计算轮廓的长度:arcLength函数 246
12.3 Hu矩 248
12.3.1 Hu矩函数 248
12.3.2 形状匹配 252
12.4 轮廓拟合 254
12.4.1 矩形包围框 254
12.4.2 最小包围矩形框 257
12.4.3 最小包围圆形 259
12.4.4 最优拟合椭圆 260
12.4.5 最优拟合直线 261
12.4.6 最小外包三角形 262
12.4.7 逼近多边形 263
12.5 凸包 266
12.5.1 获取凸包 267
12.5.2 凸缺陷 268
12.5.3 几何学测试 270
12.6 利用形状场景算法比较轮廓 275
12.6.1 计算形状场景距离 275
12.6.2 计算Hausdorff距离 278
12.7 轮廓的特征值 280
12.7.1 宽高比 280
12.7.2 Extent 281
12.7.3 Solidity 282
12.7.4 等效直径(Equivalent Diameter) 283
12.7.5 方向 284
12.7.6 掩模和像素点 286
12.7.7 最大值和最小值及它们的位置 291
12.7.8 平均颜色及平均灰度 293
12.7.9 极点 294
第13章 直方图处理 297
13.1 直方图的含义 297
13.2 绘制直方图 301
13.2.1 使用Numpy绘制直方图 301
13.2.2 使用OpenCV绘制直方图 302
13.2.3 使用掩模绘制直方图 307
13.3 直方图均衡化 312
13.3.1 直方图均衡化原理 313
13.3.2 直方图均衡化处理 317
13.4 pyplot模块介绍 319
13.4.1 subplot函数 319
13.4.2 imshow函数 320
第14章 傅里叶变换 324
14.1 理论基础 324
14.2 Numpy实现傅里叶变换 328
14.2.1 实现傅里叶变换 329
14.2.2 实现逆傅里叶变换 330
14.2.3 高通滤波示例 331
14.3 OpenCV实现傅里叶变换 333
14.3.1 实现傅里叶变换 333
14.3.2 实现逆傅里叶变换 335
14.3.3 低通滤波示例 336
第15章 模板匹配 339
15.1 模板匹配基础 339
15.2 多模板匹配 345
第16章 霍夫变换 351
16.1 霍夫直线变换 351
16.1.1 霍夫变换原理 351
16.1.2 HoughLines函数 357
16.1.3 HoughLinesP函数 359
16.2 霍夫圆环变换 361
第17章 图像分割与提取 364
17.1 用分水岭算法实现图像分割与提取 364
17.1.1 算法原理 364
17.1.2 相关函数介绍 366
17.1.3 分水岭算法图像分割实例 375
17.2 交互式前景提取 376
第18章 视频处理 383
18.1 VideoCapture类 383
18.1.1 类函数介绍 383
18.1.2 捕获摄像头视频 387
18.1.3 播放视频文件 388
18.2 VideoWriter类 389
18.2.1 类函数介绍 389
18.2.2 保存视频 391
18.3 视频操作基础 392
第19章 绘图及交互 393
19.1 绘画基础 393
19.1.1 绘制直线 394
19.1.2 绘制矩形 394
19.1.3 绘制圆形 395
19.1.4 绘制椭圆 397
19.1.5 绘制多边形 398
19.1.6 在图形上绘制文字 400
19.2 鼠标交互 402
19.2.1 简单示例 404
19.2.2 进阶示例 405
19.3 滚动条 407
19.3.1 用滚动条实现调色板 408
19.3.2 用滚动条控制阈值处理参数 409
19.3.3 用滚动条作为开关 410
第20章 K近邻算法 412
20.1 理论基础 412
20.2 计算 415
20.2.1 归一化 415
20.2.2 距离计算 416
20.2 手写数字识别的原理 417
20.3 自定义函数手写数字识别 421
20.4 K近邻模块的基本使用 427
20.5 K近邻手写数字识别 429
第21章 支持向量机 431
21.1 理论基础 431
21.2 SVM案例介绍 434
第22章 K均值聚类 439
22.1 理论基础 439
22.1.1 分豆子 439
22.1.2 K均值聚类的基本步骤 441
22.2 K均值聚类模块 441
22.3 简单示例 442
第23章 人脸识别 448
23.1 人脸检测 448
23.1.1 基本原理 448
23.1.2 级联分类器的使用 451
23.1.3 函数介绍 452
23.1.4 案例介绍 453
23.2 LBPH人脸识别 454
23.2.1 基本原理 454
23.2.2 函数介绍 456
23.2.3 案例介绍 457
23.3 EigenFaces人脸识别 458
23.3.1 基本原理 458
23.3.2 函数介绍 459
23.3.3 案例介绍 460
23.4 Fisherfaces人脸识别 461
23.4.1 基本原理 461
23.4.2 函数介绍 463
23.4.3 案例介绍 464
23.5 人脸数据库 465
参与文献 467
附录A 范例 470