猜你喜欢
OpenCV轻松入门:面向Python

OpenCV轻松入门:面向Python

书籍作者:李立宗 ISBN:9787121362903
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:2584
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书基于面向 Python 的 OpenCV(OpenCV for Python),介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线,并对细节进行补充和说明。 书中不仅介绍了 OpenCV 函数的使用方法,还介绍了函数实现的算法原理。在介绍 OpenCV 函数的 使用方法时,提供了大量的程序示例。而且在介绍函数对图像的处理前,往往先展示函数对数值、数组 的处理,方便读者从数值的角度观察和理解函数的处理过程和结果。在介绍具体的算法原理时,本书尽 量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用过多复杂抽象的公式。 本书适合计算机视觉领域的初学者阅读,包括在校学生、教师、专业技术人员、图像处理爱好者。

作者简介

李立宗,南开大学硕士,天津职业技术师范大学副教授,从事计算机视觉领域的教学和科研工作。拥有发明专利一项、软件著作权十余项,公开发表论文十余篇,主编《OpenCV编程案例详解》等多部图书。在网易云课堂主讲的《OpenCV图穷匕见》等多门课程被评为精品课。

编辑推荐
适读人群 :? 对图像处理有兴趣的零基础入门读者 ? 高校学生、教师 ? 科研人员 ? 图像处理领域的专业人员

业界专家联合力荐,助您轻松入门!

前言

前言

目前,计算机视觉技术的应用越来越广泛。伴随着硬件设备的不断升级,构造复杂的计算机视觉应用变得越来越容易了。有非常多的软件工具和库可以用来构造计算机视觉应用,而面向Python的OpenCV(OpenCV for Python)就是一个很好的选择,本书正是基于面向Python的OpenCV来讲解的。

本书的主要内容和特点

OpenCV本身是一个“黑盒”,它为我们提供了接口(参数、返回值)。我们只需要掌握接口的正确使用方法,就可以在完全不了解其内部工作原理(算法)的情况下,方便地进行各种复杂的图像处理。在这一点上,它和Photoshop等工具是相似的,只要掌握了正确的使用方法,就能够得到正确的处理结果。它们都尝试让我们专注于图像处理本身,而不用去考虑算法实现的细节。

在学习Photoshop时,我们学习的是如何使用它的功能,而不需要系统地学习每个功能所采用的算法原理。但是很明显,我们在使用OpenCV进行图像处理时,是不能完全忽略算法实现的,否则是不可能用好OpenCV的,更不能设计出好的计算机视觉应用系统。

从上述角度讲,我们可以从两个角度学习OpenCV:

? 将OpenCV作为“白盒”学习:深入学习OpenCV每个函数所使用算法的基本原理、每个函数的具体实现细节,进一步加深对图像处理的理解。

? 将OpenCV作为“黑盒”学习:仅仅将OpenCV作为一个工具来使用,学习的是每个函数内参数的含义和使用方式,学习的目的是更好地使用OpenCV函数。

本书尽量帮助读者在“黑盒”学习和“白盒”学习之间取得平衡。在介绍具体的算法原理时,尽量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用过多复杂抽象的公式。希望这样的安排能够帮助读者更好地掌握计算机视觉的相关知识,更透彻地理解计算机视觉的相关算法。在介绍OpenCV函数的使用方法时,我们为读者提供了大量的程序示例。而且在介绍函数对图像的处理前,往往先展示函数对数值、数组的处理,方便读者从数值的角度观察和理解函数的处理过程和结果。希望这些例题能够帮助读者更好地理解OpenCV处理图像的方式,快速地掌握OpenCV的使用方法,更好地使用OpenCV进行图像处理。需要说明的一点是,本书为黑白印刷,无法很好地呈现某些程序的运行效果,请读者自行运行程序并观察结果。

在内容的设置上,本书以OpenCV官方文档的知识脉络为主线,在此基础上对细节进行补充和说明。

为了方便读者学习,本书力求将每一个知识点作为一个独立的点来介绍和说明。在介绍知识点时,尽量采用从零开始的方式,以避免读者在学习过程中需要不断地离开当前知识点,去查阅相关背景资料。但是由于篇幅有限,如果某一函数已经在前面介绍过,在后面用到该函数时,就没有对其进行重复介绍,而是给出介绍该函数语法的章节位置,方便读者参考阅读。

本书适合计算机视觉领域的初学者阅读,包括在校学生、教师、专业技术人员、图像处理爱好者。

感谢

首先,我要感谢我的老师高铁杠教授,感谢高老师带我走进了计算机视觉这一领域,让我对计算机视觉产生了浓厚的兴趣,更要感谢高老师一直以来对我的关心和帮助。

感谢本书的策划编辑符隆美老师,符老师的专业精神给我留下了非常深刻的印象。感谢本书的责任编辑王中英和许艳老师,她们对本书内容做出了细致修改,不仅修改了很多不通顺的语句和错别字,还对书中存在的技术问题进行了确认和修正。还要感谢为本书出版而付出辛苦工作的电子工业出版社的其他老师们。

感谢OpenCV开源库的所有贡献者。

感谢合作单位天津拨云咨询服务有限公司为本书提供的支持。

感谢我的家人,感谢你们一直以来对我的理解、支持和付出。

互动方式

限于本人水平,书中肯定存在很多不足之处,欢迎大家提出问题和建议,也非常欢迎大家和我交流关于OpenCV的各种问题,我的邮箱是[email protected]

李立宗

2019年3月

目录

第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