OpenCV轻松入门:面向Python(第2版)
  • 推荐0
  • 收藏0
  • 浏览73

OpenCV轻松入门:面向Python(第2版)

李立宗 (作者) 

  • 书  号:9787121455995
  • 出版日期:2023-06-01
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 维护人:符隆美
本书基于面向 Python 的 OpenCV(OpenCV for Python),介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线,并对细节进行补充和说明。 书中不仅介绍了 OpenCV 函数的使用方法,还介绍了函数实现的算法原理。在介绍 OpenCV 函数的 使用方法时,提供了大量的程序示例。而且在介绍函数对图像的处理前,往往先展示函数对数值、数组 的处理,方便读者从数值的角度观察和理解函数的处理过程和结果。在介绍具体的算法原理时,本书尽 量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用过多复杂抽象的公式。
第一版上市2年销售近12000册,针对第一版的内容,在保持知识结构不变的情况下,对部分重点、难点进行了重新梳理与说明。重点对K近邻算法、支持向量机、K均值聚类、人脸识别部分进行了较大篇幅的修改。在这部分中,对相关的知识点进行了更细致深入的介绍,并增加了部分例题。
李立宗
南开大学硕士,天津职业技术师范大学副教授,从事计算机视觉领域的教学和科研工作。拥有发明专利一项、软件著作权十余项,公开发表论文十余篇,著有《计算机视觉40例:从入门到深度学习(OpenCV-Python)》等多部图书。在网易云课堂主讲的《OpenCV图穷匕见》等多门课程被评为精品课。
本书第1版出版后,深受广大读者朋友的喜爱,被很多高校选为教材,目前累计重印9次。为了更好地方便大家学习,我对本书进行了修订。本次修订主要完成了以下几个方面的工作:
1. 内容完善、重点针对人工智能部分
本书第2版在保持知识结构不变的前提下,对部分重点、难点知识进行了重新梳理与说明。重点对K近邻算法、支持向量机、K均值聚类、人脸识别部分进行了较大篇幅的修改。在这部分中,对相关的知识点进行了更细致、深入的介绍,并增加了部分例题。在例题的介绍上,增加了更详尽的分析过程,并对其中的一些难点问题进行了图解说明。在代码实现上,给出了更加细致的说明与介绍。
2. 饱和展示
在介绍一个知识点时,针对要使用的基础知识点,以“如第N章所述、如前所述”等形式导入,大部分情况下是较为合理的。但是,如果要介绍的知识点和要导入的知识点难度都较大,那么采用上述方式导入,会造成理解上的困难。针对上述问题,我对导入部分进行了重新设计,以期帮助大家更好地快速过渡到核心关键知识点的学习。针对一些关键图表等,也采用重复展示的方式,避免大家反复地回翻到前面的页面查看该图表而分散注意力,使大家能够更好地将注意力集中在当前知识点上。
针对一些难度较大、不好理解、容易使用错误的知识点(如掩膜等),分别在不同的章节,从不同的角度,对这部分知识点进行了讲解,以期能够帮助大家更好地理解相关知识点。
针对用到的一些难度较大、比较典型的Python知识点进行了介绍,以期帮助大家在Python基础比较薄弱,甚至不太了解Python的情况下能够阅读本书,完成程序的设计与编写。
3. 一图胜千言
一些知识点相对比较抽象,如果单纯使用文字描述,此时的说明可能会显得苍白无力,造成理解上的困难。图表能够形象地说明问题的核心本质,帮助我们更深入、系统地理解问题的内在逻辑。针对一些相对抽象的知识点,绘制了示意图,来帮助大家更直观、更深入地理解其原理。针对一些流程比较复杂的案例,绘制了流程图,帮助大家厘清问题的具体逻辑与思路。
4. 例题解析与代码注释
本书第2版对一些相对较难例题的解答进行了重新设计。其中,增加了例题的分析过程,在分析过程中,对例题的相关知识点、实现思路等进行了更详细的介绍。在总体说明上,进行了模块或步骤划分,让解决问题的思路更具条理性。在全局的展示与理解上,增加了流程图,对解题的具体思路和流程进行更清晰的介绍与展示。在代码实现上,对函数的选取、使用等进行了更细致的介绍。
5. 调整OpenCV的版本
在第2版中,我们使用的版本是OpenCV 4.5。OpenCV的版本升级对应着功能的增加与改进。一般来说,OpenCV的版本更新具有较好的兼容性,新版本是适配旧版本的,不涉及对原有函数的改变。但是,也有极个别的函数存在例外。例如,函数cv2.findContours()在OpenCV3中有3个返回值,在OpenCV4中只有2个返回值。在OpenCV4发布后,很多读者反馈在使用该函数时遇到错误提示。实际上,这是由于OpenCV版本更新后,仍旧使用3个返回值造成的。在第2版中,我们调整了该函数的使用说明,并保留了对该函数早前版本的相关介绍。当然,总体来说,除该函数外,新、旧版本的差别主要体现在功能的增加上。我们在学习基础函数时,不要将关注力过度集中在版本调整上。
6. 增加了配套PPT、练习题
本书第1版出版后,被很多高校选为教材。为了给广大教师、同学提供更好的学习体验,我在第2版中提供了配套PPT和练习题。配套PPT涵盖了本书的全部核心知识点,超过1000页。希望配套PPT能够为大家的学习提供方便。
7. 修订了一些错误
在本书第1版出版后,收到了很多热心读者的反馈,大家提出了很多宝贵的意见和建议。同时,大家也帮忙指出了书中存在的一些书写错误。在认真听取大家意见的基础上,我对书中的问题进行了认真细致的修订。请广大读者朋友们继续支持本书,提出意见和建议,让本书能够更好地改进。
感谢
感谢各位热心读者对本书的支持,感谢你们提出的热心建议与意见。
感谢高铁杠老师、于仕琪老师、董付国老师、毕磊老师对本书的大力支持。
感谢符隆美老师积极促成本书第2版的出版,感谢她对本书的细心修订,同时也感谢为本书出版辛苦付出的各位同人。
感谢家人们帮我分担了很多家务,让本书得以顺利出版。
本书出版受天津职业技术师范大学教材支持项目(项目编号XJJW1970)支持。
扩展服务
作者与天津拨云咨询服务有限公司合作开发了本书配套的资料——“数字图像处理虚拟实验室V0.1”,欢迎大家与作者(lilizong@gmail.com)联系索取相关资料。
本书根据作者的视频课程《Python+OpenCV图像处理》整理扩充而成,欢迎大家扫描本书封底的二维码输入“视频”获取相关视频课的内容。
李立宗
2021.4.6

目录

第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章 几何变换 116
5.1 缩放 116
5.2 翻转 120
5.3 仿射 121
5.3.1 平移 122
5.3.2 旋转 123
5.3.3 更复杂的仿射变换 124
5.4 透视 126
5.5 重映射 127
5.5.1 映射参数的理解 128
5.5.2 复制 129
5.5.3 绕x轴翻转 131
5.5.4 绕y轴翻转 133
5.5.5 绕x轴、y轴翻转 135
5.5.6 x轴、y轴互换 137
5.5.7 图像缩放 139
第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
附录A 范例 551
附录B 练习题 554
附录C 参考答案 561
参考文献 564

读者评论