本书重点
解析OpenCV图像与视频处理技术,实战停车场车牌识别、目标检测、数字水印、图像加解密、物体计数、图像轮廓、手势识别应用案例
内容简介
本书共分20章,主要内容包括计算机视觉概述、OpenCV的Python开发环境搭建、OpenCV基本操作、数组矩阵、图像处理模块、灰度变换和直方图修正、图像平滑、几何变换、图像边缘检测、图像分割、图像金字塔、图像形态学、视频处理,以及停车场车牌识别、目标检测、数字水印、图像加解密、物体计数、图像轮廓、手势识别等案例。
适合读者
本书既适合OpenCV初学者、计算机视觉与图像处理应用开发人员、人工智能算法开发人员阅读,也适合高等院校或高职高专院校计算机视觉与图像处理、人工智能等相关专业的师生教学参考。
作者简介
朱文伟,名校计算机专业统招硕士,20多年C\C++、Java开发经验。主导开发过密码、图形、人工智能等产品。精通Linux、Windows系统开发及数据库开发技术。著有图书《OpenCV计算机视觉开发实践:基于Qt C++》《OpenCV计算机视觉开发实践:基于Python》《Linux C与C++一线开发实践(第2版)》《Rust编程与项目实战》《嵌入式Linux驱动开发实践》《高性能Linux网络编程核心技术揭秘》《Linux C/C++服务器开发实践》《Qt 6.x从入门到精通》《PyQt 5从入门到精通》《Linux C与C++ 一线开发实践》《Visual C++2017从入门到精通》《Windows C/C++加密解密实战》《密码学原理与Java实现》《OpenCV 4.5计算机视觉开发实战(基于VC++)》《OpenCV 4.5计算机视觉开发实战:基于Python》。
前言
如今,计算机视觉算法的应用已经渗透到我们生活的方方面面。机器人、无人机、增强现实、虚拟现实、医学影像分析等领域,无一不涉及计算机视觉算法。OpenCV是计算机视觉领域的一个图形与图像算法库,它由一系列 C 函数和少量 C++ 类构成,同时提供了C++、Python、Java、Ruby、MATLAB、C#、Ch、Ruby、Go等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。它轻量级而且高效,在学术界、工业界都得到了广泛的使用。无论是初学者还是资深研究人员,都可以在其中找到得心应手的“武器”,帮助你在研究和应用开发的道路上披荆斩棘。
关于本书
近年来,在图像分割、物体识别、运动跟踪、人脸识别、目标检测、机器视觉、机器人等领域,OpenCV可谓大显身手。OpenCV内容之丰富,是目前开源视觉算法库中所罕见的。每年我们都能看到不少关于OpenCV的图书,但是随着OpenCV版本的更迭,部分学习资料已经过时。本书基于Python 3.8和OpenCV 4.10版本编写,面向初学者,涵盖传统的图形图像算法与视频处理方法,并配以示例代码,内容丰富,行文通俗易懂。
本书是《OpenCV 4.5计算机视觉开发实战:基于Python》的升级书,主要是OpenCV升级为4.10,以及增加5个的实战案例。
本书不仅剖析了大量OpenCV函数的调用细节,还对原理解释得清晰明了,让读者“知其然,并知其所以然”。本书介绍OpenCV 中的220多个函数,并给出100多个示例程序,以及车牌识别、目标检测、数字水印、图像加解密、物体计数、图像轮廓、手势识别等案例代码。在介绍OpenCV 4.10新技术的同时,尽量讲解其背后的原理和公式,为大家以后做专业的图像开发奠定基础。
配套下载与作者答疑服务
本书配套示例源码、PPT课件、配图PDF文件与作者答疑服务,读者需要用自己的微信扫描下方的二维码下载,可按扫描出来的页面提示,把链接转发到自己的邮箱中下载。
本书适合的读者
阅读本书需要有Python编程基础,适合的读者如下:
- OpenCV开发初学者
- 计算机视觉领域的初学者
- 人工智能图像处理算法开发人员
- 高等院校计算机视觉课程的学生
- 高职高专院校计算机视觉课程的学生
作者与鸣谢
本书由朱文伟和李建英创作。虽然作者尽了最大努力编写本书,但书中依然可能存在疏漏,敬请读者提出宝贵意见和建议。在图书出版过程中得到清华大学出版社老师们的支持和帮助,在此表示衷心的感谢。
作 者
2025年1月
目录
第 1章 计算机视觉概述 1
1.1 图像的基本概念 1
1.1.1 图像和图形 1
1.1.2 数字图像及其特点 1
1.1.3 图像单位 2
1.1.4 图像分辨率与屏幕分辨率 3
1.1.5 图像的灰度与灰度级 3
1.1.6 图像的深度 4
1.1.7 二值图像、灰度图像与彩色图像 4
1.1.8 通道 5
1.1.9 图像存储 5
1.2 图像噪声 5
1.2.1 图像噪声的定义 5
1.2.2 图像噪声的来源 6
1.2.3 图像噪声的滤除 6
1.3 图像处理 7
1.3.1 图像处理的分类 7
1.3.2 数字图像处理 8
1.3.3 数字图像处理常用方法 9
1.3.4 图像处理的应用 12
1.4 计算机视觉概述 12
1.4.1 基本概念 12
1.4.2 计算机视觉的应用 14
1.4.3 与相关学科的区别 15
1.5 OpenCV概述 15
第 2 章 OpenCV的Python开发环境搭建 18
2.1 Python下载与安装 18
2.2 在线安装与卸载opencv-python 20
2.2.1 在线安装opencv-python 20
2.2.2 卸载opencv-python 25
2.3 离线安装与卸载opencv-python 25
2.3.1 下载离线版opencv-python 25
2.3.2 离线安装numpy和Matplotlib库 26
2.3.3 离线安装opencv-python 26
2.4 使用集成开发环境PyCharm 27
2.4.1 PyCharm的下载和安装 27
2.4.2 了解PyCharm的虚拟环境 33
2.4.3 在PyCharm下开发OpenCV程序 36
2.4.4 调试Python程序 37
2.5 测试一下NumPy的数学函数 37
第 3 章 OpenCV基本操作 39
3.1 OpenCV架构 39
3.2 图像输入输出模块imgcodecs 41
3.2.1 读取图像文件 41
3.2.2 得到读取的图片的高度和宽度 43
3.2.3 imwrite保存图片 44
3.3 OpenCV界面编程 46
3.4 单窗口显示多图片 47
3.5 销毁窗口 49
3.6 鼠标事件 51
3.7 键盘事件 54
3.8 滑动条事件 55
第 4 章 数组矩阵 58
4.1 NumPy概述 58
4.2 ndarray对象 59
4.3 NumPy的数据类型 60
4.4 数组属性 63
4.5 新建数组 65
4.6 从已有的数组创建数组 66
4.7 从数值范围创建数组 68
4.8 切片和索引 69
4.9 高级索引 71
4.9.1 整数数组索引 71
4.9.2 布尔索引 72
4.9.3 花式索引 72
4.10 迭代数组 73
4.10.1 迭代器对象nditer 73
4.10.2 控制遍历顺序 74
4.10.3 修改数组中元素的值 75
4.10.4 使用外部循环 75
4.10.5 广播迭代 76
4.11 数组操作 77
4.11.1 修改数组形状 77
4.11.2 翻转数组 79
第 5 章 图像处理模块 83
5.1 颜色变换cvtColor 83
5.2 画基本图形 84
5.2.1 画点 84
5.2.2 画矩形 85
5.2.3 画圆 85
5.2.4 画椭圆 86
5.2.5 画线段 88
5.2.6 画多边形 88
5.2.7 填充多边形 89
5.3 文字绘制 91
5.4 为图像添加边框 93
5.5 在图像中查找轮廓 95
第 6 章 灰度变换和直方图修正 97
6.1 点运算 97
6.1.1 点运算的基本概念 97
6.1.2 点运算的目标与分类 97
6.1.3 点运算的特点和应用 98
6.2 灰度变换 99
6.2.1 灰度变换的基本概念 99
6.2.2 灰度变换的作用 99
6.2.3 灰度变换的方法 100
6.2.4 灰度化 100
6.2.5 对比度 103
6.2.6 灰度的线性变换 104
6.2.7 分段线性变换 106
6.2.8 对数变换和反对数变换 108
6.2.9 幂律变换 109
6.3 直方图修正 111
6.3.1 直方图的概念 111
6.3.2 直方图均衡化 115
第 7 章 图像平滑 119
7.1 图像平滑基础 119
7.2 线性滤波 121
7.2.1 归一化方框滤波器 121
7.2.2 高斯滤波器 122
7.3 非线性滤波 127
7.3.1 中值滤波 127
7.3.2 双边滤波 127
第 8 章 几何变换 129
8.1 几何变换基础 129
8.2 图像平移 132
8.3 图像旋转 133
8.4 仿射变换 137
8.5 图像缩放 139
8.5.1 缩放原理 139
8.5.2 OpenCV中的缩放 140
第 9 章 图像边缘检测 142
9.1 概述 142
9.2 边缘检测研究的历史现状 145
9.3 边缘定义及类型分析 146
9.4 梯度的概念 147
9.5 图像边缘检测的应用 147
9.6 目前边缘检测存在的问题 149
9.7 边缘检测的基本思想 150
9.8 图像边缘检测的步骤 151
9.9 经典图像边缘检测算法 152
9.9.1 Roberts算子 153
9.9.2 Sobel算子边缘检测 155
9.9.3 Prewitt算子边缘检测 157
9.9.4 LoG边缘检测算子 159
9.9.5 边缘检测的最新技术与方法 162
第 10 章 图像分割 165
10.1 图像分割概述 165
10.2 图像分割技术现状 166
10.3 图像分割的应用 167
10.4 图像分割的数学定义 168
10.5 图像分割方法的分类 169
10.5.1 基于阈值化的分割方法 170
10.5.2 基于边缘的分割方法 171
10.5.3 基于区域的分割方法 171
10.5.4 基于神经网络的分割方法 173
10.5.5 基于聚类的分割方法 174
10.6 使用OpenCV进行图像分割 175
10.7 彩色图像分割 180
10.8 grabCut算法分割图像 182
10.8.1 基本概念 182
10.8.2 grabCut函数 183
10.9 floodFill漫水填充分割 188
10.9.1 基本概念 188
10.9.2 floodFill函数 188
10.10 分水岭分割法 191
10.10.1 基本概念 191
10.10.2 wathershed函数 192
第 11 章 图像金字塔 196
11.1 基本概念 196
11.2 高斯金字塔 197
11.2.1 向下取样 198
11.2.2 向上取样 199
11.3 拉普拉斯金字塔 201
第 12 章 图像形态学 203
12.1 图像形态学基本概念 203
12.2 形态学的应用 203
12.3 数学上的形态学 204
12.3.1 拓扑学 204
12.3.2 数学形态学的组成与操作分类 205
12.3.3 数学形态学的应用 205
12.4 结构元素 206
12.5 膨胀 206
12.6 腐蚀 208
12.7 开运算 210
12.8 闭运算 211
12.9 实现腐蚀和膨胀 212
12.10 实现开闭运算和顶帽/黑帽 216
12.11 用形态学运算检测边缘 220
12.12 击中击不中 221
12.13 利用形态学运算提取水平线和垂直线 224
第 13 章 视频处理 226
13.1 OpenCV视频处理架构 226
13.2 捕获视频类VideoCapture 227
13.2.1 构造VideoCapture对象 227
13.2.2 判断打开视频是否成功 228
13.2.3 读取视频帧 228
13.2.4 播放视频文件 229
13.2.5 获取和设置视频属性 231
13.2.6 播放摄像头视频 233
第 14 章 停车场车牌识别案例实战 236
14.1 需求分析 236
14.2 技术可行性分析 237
14.2.1 国外技术分析 237
14.2.2 国内技术分析 239
14.2.3 车牌识别技术的难点 240
14.2.4 车牌识别系统概述 240
14.3 车牌定位技术 241
14.3.1 车牌特征概述 241
14.3.2 车牌定位方法 242
14.3.3 车牌图像预处理 246
14.3.4 车牌图像的灰度化 246
14.3.5 车牌图像的直方图均衡化 248
14.3.6 车牌图像的滤波 249
14.3.7 车牌图像的二值化 250
14.3.8 车牌图像的边缘检测 251
14.3.9 车牌图像的灰度映射 251
14.3.10 车牌图像的改进型投影法定位 252
14.4 车牌字符分割技术 253
14.4.1 常用车牌字符分割算法 253
14.4.2 车牌倾斜问题 255
14.4.3 车牌倾斜度检测方法 256
14.4.4 车牌倾斜的校正方法 256
14.4.5 车牌边框和铆钉的去除 256
14.4.6 车牌字符分割 256
14.4.7 基于垂直投影和先验知识的车牌字符分割 257
14.4.8 粘连车牌字符的分割 258
14.4.9 断裂车牌字符的合并 258
14.4.10 对车牌字符的切分结果进行确认 259
14.5 车牌字符识别技术 259
14.5.1 模式识别 260
14.5.2 字符识别 261
14.5.3 汉字识别 271
第 15 章 OpenCV目标检测 287
15.1 目标检测概述 287
15.2 目标检测的基本概念 289
15.3 视频序列图像预处理 291
15.4 基于深度学习的运动目标检测 292
15.4.1 YOLO运动目标检测算法 293
15.4.2 YOLOv2概述 297
15.4.3 YOLOv3概述 298
15.4.4 实战YOLOv3识别物体 300
15.4.5 SSD运动目标检测算法 309
15.4.6 实战SSD 313
15.4.7 实战人脸检测 315
第 16 章 数字水印 320
16.1 基本概念 320
16.1.1 数字水印的概念 320
16.1.2 数字水印的特点 321
16.2 数字水印原理 321
16.2.1 嵌入过程 322
16.2.2 提取过程 322
16.3 相关函数 322
16.3.1 cv2.bitwise_and函数 322
16.3.2 cv2.bitwise_or函数 324
16.4 代码实现数字水印 325
第 17 章 图像加密和解密 303
17.1 图像加密解密原理 303
17.2 相关函数 304
17.3 代码实现图像加解密 305
第 18 章 物体计数 303
18.1 基本原理 303
18.2 相关函数 303
18.3 代码实现药片计数 306
第 19 章 图像轮廓 303
19.1 基本概念 303
19.2 应用场景 304
19.3 OpenCV中轮廓函数 304
19.3.1 查找轮廓findContours 304
19.3.2 轮廓的基本属性 306
19.3.3 绘制轮廓drawContours 307
19.3.4 求轮廓面积contourArea 307
19.3.5 实战轮廓函数 307
19.3.6 黑白反转 310
第 20 章 手势识别 303
20.1 概述 303
20.2 NumPy中的ndarray 303
20.2.1 NumPy是什么 304
20.2.2 ndarray的概念 304
20.2.3 ndarray的特点 305
20.2.4 NumPy数组的优势 305
20.2.5 内存中的ndarray对象 305
20.2.6 ndarray数组对象的创建 306
20.2.7 ndarray的重要属性 311
20.2.8 数组的轴和轴的长度 312
20.3 凸包和凸包检测 315
20.4 凸缺陷及其应用 320
20.4.1 查找凸包和凸缺陷的示例 321
20.4.2 凸缺陷应用 323
20.5 手势识别原理 324
20.6 区分0和1的手势 325
20.7 区分手势1到5 327
正版购买
等待上架