图书目录

目    录

第 1 章  计算机视觉概述 1

1.1  图像的基本概念 1

1.1.1  图像和图形 1

1.1.2  数字图像及其特点 2

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  图像处理的应用 11

1.4  计算机视觉概述 12

1.4.1  基本概念 12

1.4.2  计算机视觉的应用 13

1.4.3  与相关学科的区别 14

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 24

2.3  离线安装opencv-python 24

2.3.1  下载离线版opencv-python 25

2.3.2  离线安装NumPy和Matplotlib库 25

2.3.3  离线安装opencv-python 25

2.4  使用集成开发环境PyCharm 26

2.4.1  PyCharm的下载和安装 26

2.4.2  了解PyCharm的虚拟环境 32

2.4.3  在PyCharm下开发OpenCV程序 34

2.4.4  调试Python程序 35

2.5  测试一下NumPy的数学函数 36

第 3 章  OpenCV基本操作 37

3.1  OpenCV架构 37

3.2  图像输入/输出模块imgcodecs 39

3.2.1  读取图像文件 39

3.2.2  得到读取的图片的高度和宽度 42

3.2.3  imwrite保存图片 42

3.3  OpenCV界面编程 44

3.4  单窗口显示多图片 45

3.5  销毁窗口 47

3.6  调整窗口大小 48

3.7  鼠标事件 49

3.8  键盘事件 52

3.9  滑动条事件 53

第 4 章  数组矩阵 56

4.1  NumPy概述 56

4.2  ndarray对象 57

4.3  NumPy的数据类型 59

4.4  数组属性 61

4.5  新建数组 63

4.6  通过已有的数组创建数组 65

4.7  通过数值范围创建数组 66

4.8  切片和索引 67

4.9  高级索引 69

4.9.1  整数数组索引 69

4.9.2  布尔索引 70

4.9.3  花式索引 71

4.10  迭代数组 72

4.10.1  迭代器对象nditer 72

4.10.2  控制遍历顺序 73

4.10.3  修改数组中元素的值 73

4.10.4  使用外部循环 74

4.10.5  广播迭代 74

4.11  数组操作 75

4.11.1  修改数组形状 75

4.11.2  翻转数组 77

第 5 章  图像处理模块 81

5.1  颜色变换cvtColor 81

5.2  画基本图形 82

5.2.1  画点 82

5.2.2  画矩形 83

5.2.3  画圆 83

5.2.4  画椭圆 84

5.2.5  画线段 86

5.2.6  画多边形 86

5.2.7  填充多边形 87

5.3  文字绘制 89

5.4  为图像添加边框 91

5.5  在图像中查找轮廓 93

第 6 章  灰度变换和直方图修正 95

6.1  点运算 95

6.1.1  点运算的基本概念 95

6.1.2  点运算的目标与分类 96

6.1.3  点运算的特点和应用 96

6.2  灰度变换 97

6.2.1  灰度变换的基本概念 97

6.2.2  灰度变换的作用 97

6.2.3  灰度变换的方法 98

6.2.4  灰度化 98

6.2.5  对比度 101

6.2.6  灰度的线性变换 102

6.2.7  分段线性变换 104

6.2.8  对数变换和反对数变换 106

6.2.9  幂律变换 107

6.3  直方图修正 109

6.3.1  直方图的概念 109

6.3.2  直方图均衡化 112

第 7 章  图像平滑 117

7.1  图像平滑基础 117

7.2  线性滤波 119

7.2.1  归一化方框滤波器 119

7.2.2  高斯滤波器 120

7.3  非线性滤波 124

7.3.1  中值滤波 124

7.3.2  双边滤波 125

第 8 章  几何变换 127

8.1  几何变换基础 127

8.2  图像平移 130

8.3  图像旋转 131

8.4  仿射变换 134

8.5  图像缩放 136

8.5.1  缩放原理 136

8.5.2  OpenCV中的缩放 137

第 9 章  图像边缘检测 139

9.1  概述 139

9.2  边缘检测研究的历史现状 141

9.3  边缘定义及类型分析 142

9.4  梯度的概念 144

9.5  图像边缘检测的应用 144

9.6  目前边缘检测存在的问题 146

9.7  边缘检测的基本思想 147

9.8  图像边缘检测的步骤 147

9.9  经典图像边缘检测算法 149

9.9.1  Roberts算子 150

9.9.2  Sobel算子边缘检测 151

9.9.3  Prewitt算子边缘检测 153

9.9.4  LoG边缘检测算子 155

9.9.5  边缘检测的最新技术与方法 158

第 10 章  图像分割 161

10.1  图像分割概述 161

10.2  图像分割技术现状 162

10.3  图像分割的应用 163

10.4  图像分割的数学定义 164

10.5  图像分割方法的分类 165

10.5.1  基于阈值化的分割方法 165

10.5.2  基于边缘的分割方法 166

10.5.3  基于区域的分割方法 167

10.5.4  基于神经网络的分割方法 169

10.5.5  基于聚类的分割方法 169

10.6  使用OpenCV进行图像分割 170

10.7  彩色图像分割 175

10.8  grabCut算法分割图像 177

10.8.1  基本概念 177

10.8.2  grabCut函数 179

10.9  floodFill漫水填充分割 183

10.9.1  基本概念 183

10.9.2  floodFill函数 183

10.10  分水岭分割法 185

10.10.1  基本概念 186

10.10.2  距离变换函数distanceTransform 189

10.10.3  区域标记函数connectedComponents 191

10.10.4  分水岭函数wathershed 192

第 11 章  图像金字塔 195

11.1  基本概念 195

11.2  高斯金字塔 196

11.2.1  向下采样 197

11.2.2  向上采样 198

11.3  拉普拉斯金字塔 200

第 12 章  图像形态学 202

12.1  图像形态学基本概念 202

12.2  形态学的应用 202

12.3  数学上的形态学 203

12.3.1  拓扑学 203

12.3.2  数学形态学的组成与操作分类 204

12.3.3  数学形态学的应用 204

12.4  结构元素 205

12.5  膨胀 205

12.6  腐蚀 207

12.7  开运算 209

12.8  闭运算 210

12.9  实现腐蚀和膨胀 211

12.10  实现开闭运算和顶帽/黑帽 215

12.11  用形态学运算检测边缘 219

12.12  击中击不中 220

12.13  利用形态学运算提取水平线和垂直线 223

第 13 章  视频处理 225

13.1  OpenCV视频处理架构 225

13.2  捕获视频类VideoCapture 226

13.2.1  构造VideoCapture对象 226

13.2.2  判断打开视频是否成功 227

13.2.3  读取视频帧 227

13.2.4  播放视频文件 228

13.2.5  获取和设置视频属性 230

13.2.6  播放摄像头视频 232

第 14 章  停车场车牌识别案例实战 235

14.1  需求分析 235

14.2  技术可行性分析 236

14.2.1  国外技术分析 236

14.2.2  国内技术分析 238

14.2.3  车牌识别技术的难点 239

14.2.4  车牌识别系统概述 239

14.3  车牌定位技术 240

14.3.1  车牌特征概述 240

14.3.2  车牌定位方法 241

14.3.3  车牌图像预处理 245

14.3.4  车牌图像的灰度化 245

14.3.5  车牌图像的直方图均衡化 247

14.3.6  车牌图像的滤波 248

14.3.7  车牌图像的二值化 249

14.3.8  车牌图像的边缘检测 249

14.3.9  车牌图像的灰度映射 250

14.3.10  车牌图像的改进型投影法定位 250

14.4  车牌字符分割技术 252

14.4.1  常用车牌字符分割算法 252

14.4.2  车牌倾斜问题 254

14.4.3  车牌倾斜度检测方法 254

14.4.4  车牌倾斜的校正方法 255

14.4.5  车牌边框和铆钉的去除 255

14.4.6  车牌字符分割 255

14.4.7  基于垂直投影和先验知识的车牌字符分割 256

14.4.8  粘连车牌字符的分割 257

14.4.9  断裂车牌字符的合并 257

14.4.10  对车牌字符的切分结果进行确认 258

14.5  车牌字符识别技术 259

14.5.1  模式识别 259

14.5.2  字符识别 260

14.5.3  汉字识别 270

第 15 章  OpenCV目标检测 286

15.1  目标检测概述 286

15.2  目标检测的基本概念 288

15.3  视频序列图像预处理 290

15.4  基于深度学习的运动目标检测 291

15.4.1  YOLO运动目标检测算法 292

15.4.2  YOLOv2概述 296

15.4.3  YOLOv3概述 297

15.4.4  实战YOLOv3识别物体 299

15.4.5  SSD运动目标检测算法 309

15.4.6  实战SSD 312

15.4.7  实战人脸检测 314

第 16 章  数字水印 319

16.1  基本概念 319

16.1.1  数字水印的概念 319

16.1.2  数字水印的特点 320

16.2  数字水印原理 320

16.2.1  嵌入过程 321

16.2.2  提取过程 321

16.3  相关函数 321

16.3.1  cv2.bitwise_and函数 322

16.3.2  cv2.bitwise_or函数 323

16.4  代码实现数字水印 324

第 17 章  图像加密和解密 326

17.1  图像加密和解密原理 326

17.2  相关函数 327

17.3  代码实现图像加解密 328

第 18 章  物体计数 330

18.1  基本原理 330

18.2  相关函数 330

18.3  代码实现药片计数 332

第 19 章  图像轮廓 335

19.1  基本概念 335

19.2  应用场景 336

19.3  OpenCV中的轮廓函数 336

19.3.1  查找轮廓findContours 336

19.3.2  轮廓的基本属性 337

19.3.3  绘制轮廓drawContours 338

19.3.4  求轮廓面积contourArea 338

19.4  实战轮廓函数 339

19.5  实战黑白翻转 341

第 20 章  手势识别 343

20.1  概述 343

20.2  NumPy中的ndarray 343

20.2.1  NumPy是什么 344

20.2.2  ndarray的概念 344

20.2.3  ndarray的特点 345

20.2.4  NumPy数组的优势 345

20.2.5  内存中的ndarray对象 345

20.2.6  ndarray数组对象的创建 346

20.2.7  ndarray的重要属性 351

20.2.8  数组的轴和轴的长度 352

20.3  凸包和凸包检测 355

20.4  凸缺陷及其应用 360

20.4.1  查找凸包和凸缺陷的示例 361

20.4.2  凸缺陷的应用 363

20.5  手势识别原理 364

20.6  区分手势0和手势1 365

20.7  区分手势1到手势5 367