本书基于面向 Python 的 OpenCV(OpenCV for Python),介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线,并对细节进行补充和说明。 书中不仅介绍了 OpenCV 函数的使用方法,还介绍了函数实现的算法原理。在介绍 OpenCV 函数的 使用方法时,提供了大量的程序示例。而且在介绍函数对图像的处理前,往往先展示函数对数值、数组 的处理,方便读者从数值的角度观察和理解函数的处理过程和结果。在介绍具体的算法原理时,本书尽 量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用过多复杂抽象的公式。
李立宗,天津职业技术师范大学信息技术工程学院副教授,参与了《数字图像处理》等多本图书的编写工作,对数字图像处理研究颇深。
第1章 OpenCV入门 1
1.1 如何使用 1
1.2 图像处理基本操作 3
1.2.1 读取图像 4
1.2.2 显示图像 5
1.2.3 保存图像 10
1.3 OpenCV贡献库 10
第2章 图像处理基础 12
2.1 图像的基本表示方法 12
2.2 像素处理 16
2.3 使用numpy.array访问像素 24
2.4 感兴趣区域(ROI) 30
2.5 通道操作 32
2.5.1 通道拆分 33
2.5.2 通道合并 35
2.6 获取图像属性 36
第3章 图像运算 38
3.1 图像加法运算 38
3.1.1 加号运算符 38
3.1.2 cv2.add()函数 39
3.2 图像加权和 42
3.3 按位逻辑运算 44
3.3.1 按位与运算 44
3.3.2 按位或运算 48
3.3.3 按位非运算 49
3.3.4 按位异或运算 50
3.4 掩膜 51
3.5 图像与数值的运算 54
3.6 位平面分解 56
3.7 图像加密和解密 62
3.8 数字水印 66
3.8.1 原理 67
3.8.2 实现方法 70
3.8.3 例题 77
3.9 脸部打码及解码 78
3.9.1 按位与方式 78
3.9.2 ROI方式 82
第4章 色彩空间类型转换 85
4.1 色彩空间基础 85
4.1.1 GRAY色彩空间 85
4.1.2 XYZ色彩空间 86
4.1.3 YCrCb色彩空间 86
4.1.4 HSV色彩空间 87
4.1.5 HLS色彩空间 88
4.1.6 CIEL*a*b*色彩空间 89
4.1.7 CIEL*u*v*色彩空间 90
4.1.8 Bayer色彩空间 90
4.2 类型转换函数 92
4.3 类型转换实例 98
4.3.1 通过数组观察转换效果 98
4.3.2 图像处理实例 102
4.4 HSV色彩空间讨论 104
4.4.1 基础知识 104
4.4.2 获取指定颜色 105
4.4.3 标记指定颜色 107
4.4.4 标记肤色 111
4.4.5 实现艺术效果 112
4.5 alpha通道 113
第5章 几何变换 117
5.1 缩放 117
5.2 翻转 121
5.3 仿射 122
5.3.1 平移 123
5.3.2 旋转 124
5.3.3 更复杂的仿射变换 125
5.4 透视 126
5.5 重映射 128
5.5.1 映射参数的理解 129
5.5.2 复制 130
5.5.3 绕x轴翻转 132
5.5.4 绕y轴翻转 134
5.5.5 绕x轴、y轴翻转 136
5.5.6 x轴、y轴互换 138
5.5.7 图像缩放 140
第6章 阈值处理 141
6.1 threshold函数 141
6.1.1 二值化阈值处理(cv2.THRESH_BINARY) 142
6.1.2 反二值化阈值处理(cv2.THRESH_BINARY_INV) 144
6.1.3 截断阈值化处理(cv2.THRESH_TRUNC) 146
6.1.4 超阈值零处理(cv2.THRESH_TOZERO_INV) 147
6.1.5 低阈值零处理(cv2.THRESH_TOZERO) 149
6.2 Otsu处理 150
6.3 自适应阈值处理 153
第7章 图像平滑处理 157
7.1 均值滤波 159
7.1.1 基本原理 159
7.1.2 函数语法 166
7.1.3 程序示例 167
7.2 方框滤波 168
7.2.1 基本原理 169
7.2.2 函数语法 169
7.2.3 程序示例 171
7.3 高斯滤波 176
7.3.1 基本原理 176
7.3.2 函数语法 177
7.3.3 程序示例 179
7.4 中值滤波 180
7.4.1 基本原理 180
7.4.2 函数语法 181
7.4.3 程序示例 181
7.5 双边滤波 182
7.5.1 基本原理 182
7.5.2 函数语法 184
7.5.3 程序示例 185
7.6 2D卷积 186
第8章 形态学操作 189
8.1 腐蚀 189
8.2 膨胀 194
8.3 通用形态学函数 199
8.4 开运算 199
8.5 闭运算 201
8.6 形态学梯度运算 203
8.7 礼帽运算 204
8.8 黑帽运算 205
8.9 核函数 207
第9章 图像梯度 210
9.1 卷积基础 210
9.2 Sobel理论基础 214
9.3 Sobel算子及函数使用 216
9.3.1 参数ddepth 217
9.3.2 方向 221
9.3.3 实例 223
9.4 Scharr算子及函数使用 226
9.5 Sobel算子和Scharr算子的比较 231
9.6 Laplacian算子及函数使用 232
9.7 算子总结 234
第10章 Canny边缘检测 235
10.1 Canny边缘检测基础 235
10.2 Canny函数及使用 239
第11章 图像金字塔 241
11.1 理论基础 241
11.2 pyrDown函数及使用 243
11.3 pyrUp函数及使用 245
11.4 采样可逆性的研究 247
11.5 拉普拉斯金字塔 250
11.5.1 定义 250
11.5.2 应用 252
第12章 图像轮廓 257
12.1 查找并绘制轮廓 257
12.1.1 查找图像轮廓:findContours函数 257
12.1.2 绘制图像轮廓:drawContours函数 265
12.1.3 轮廓实例 266
12.2 矩特征 270
12.2.1 矩的计算:moments函数 271
12.2.2 计算轮廓的面积:contourArea函数 273
12.2.3 计算轮廓的长度:arcLength函数 276
12.3 Hu矩 278
12.3.1 Hu矩函数 278
12.3.2 形状匹配 282
12.4 轮廓拟合 284
12.4.1 矩形包围框 285
12.4.2 最小包围矩形框 287
12.4.3 最小包围圆形 289
12.4.4 最优拟合椭圆 290
12.4.5 最优拟合直线 291
12.4.6 最小外包三角形 293
12.4.7 逼近多边形 294
12.5 凸包 296
12.5.1 获取凸包 297
12.5.2 凸缺陷 299
12.5.3 几何学测试 302
12.6 利用形状场景算法比较轮廓 306
12.6.1 计算形状场景距离 306
12.6.2 计算Hausdorff距离 309
12.7 轮廓的特征值 312
12.7.1 宽高比 312
12.7.2 Extent 313
12.7.3 Solidity 314
12.7.4 等效直径(Equivalent Diameter) 315
12.7.5 方向 316
12.7.6 掩膜和像素点 318
12.7.7 最大值和最小值及它们的位置 323
12.7.8 平均颜色及平均灰度 325
12.7.9 极点 326
第13章 直方图处理 329
13.1 直方图的含义 329
13.2 绘制直方图 333
13.2.1 使用Numpy绘制直方图 333
13.2.2 使用OpenCV绘制直方图 335
13.2.3 使用掩膜绘制直方图 341
13.3 直方图均衡化 345
13.3.1 直方图均衡化原理 347
13.3.2 直方图均衡化处理 351
13.4 pyplot模块介绍 353
13.4.1 subplot函数 353
13.4.2 imshow函数 354
第14章 傅里叶变换 358
14.1 理论基础 358
14.2 Numpy实现傅里叶变换 362
14.2.1 实现傅里叶变换 363
14.2.2 实现逆傅里叶变换 364
14.3 OpenCV实现傅里叶变换 365
14.3.1 实现傅里叶变换 366
14.3.2 实现逆傅里叶变换 368
14.4 滤波处理 369
14.4.1 滤波原理 369
14.4.2 高通滤波实现 374
14.4.3 低通滤波实现 377
第15章 模板匹配 380
15.1 模板匹配基础 380
15.2 多模板匹配 387
第16章 霍夫变换 393
16.1 霍夫直线变换 393
16.1.1 霍夫变换原理 393
16.1.2 HoughLines函数 399
16.1.3 HoughLinesP函数 401
16.2 霍夫圆环变换 403
第17章 图像分割与提取 406
17.1 用分水岭算法实现图像分割与提取 406
17.1.1 算法原理 406
17.1.2 相关函数介绍 408
17.1.3 分水岭算法图像分割实例 418
17.2 交互式前景提取 421
17.2.1 矩形框提取 424
17.2.2 自定义模板提取 426
17.2.3 手绘模板提取 429
第18章 视频处理 432
18.1 VideoCapture类 432
18.1.1 类函数介绍 432
18.1.2 捕获摄像头视频 437
18.1.3 播放视频文件 438
18.2 VideoWriter类 438
18.2.1 类函数介绍 439
18.2.2 保存视频 440
18.3 视频操作基础 442
第19章 绘图及交互 444
19.1 绘画基础 444
19.1.1 绘制直线 445
19.1.2 绘制矩形 446
19.1.3 绘制圆形 447
19.1.4 绘制椭圆 449
19.1.5 绘制多边形 450
19.1.6 在图形上绘制文字 451
19.2 鼠标交互 454
19.2.1 绘制随机矩形 456
19.2.2 双窗口绘制图形 457
19.2.3 绘制多种不同图形 458
19.3 滚动条 460
19.3.1 用滚动条实现调色板 461
19.3.2 滚动条交互 462
19.3.3 用滚动条作为开关 463
第20章 K近邻算法 465
20.1 理论基础 465
20.2 计算 468
20.2.1 归一化 468
20.2.2 距离计算 469
20.3 手写数字识别的原理 470
20.4 自定义函数手写数字识别 475
20.5 K近邻模块的基本使用 482
20.6 K近邻手写数字识别 487
第21章 支持向量机 490
21.1 理论基础 490
21.2 SVM流程 493
21.3 SVM员工表现预测 494
21.4 手写数字识别 498
第22章 K均值聚类 508
22.1 理论基础 508
22.1.1 分豆子 509
22.1.2 K均值聚类的基本步骤 512
22.2 K均值聚类模块 512
22.3 单特征豆子分类 513
22.4 米粒分类 517
22.5 灰度图像二值化 521
第23章 人脸识别 526
23.1 人脸检测 526
23.1.1 基本原理 526
23.1.2 级联分类器的使用 529
23.1.3 函数介绍 530
23.1.4 案例介绍 531
23.2 人脸识别基础 534
23.2.1 人脸识别基本流程 534
23.2.2 OpenCV人脸识别基础 535
23.3 LPBH人脸识别 536
23.3.1 基本原理 537
23.3.2 函数介绍 540
23.3.3 案例介绍 541
23.4 EigenFaces人脸识别 543
23.4.1 基本原理 543
23.4.2 函数介绍 543
23.4.3 案例介绍 544
23.5 Fisherfaces人脸识别 546
23.5.1 基本原理 546
23.5.2 函数介绍 547
23.5.3 案例介绍 548
23.6 人脸数据库 549