图书目录

目    录

第1章  数字图像视觉概述 1

1.1  图像的基本概念 1

1.1.1  图像和图形 1

1.1.2  什么是数字图像 1

1.1.3  数字图像的特点 2

1.1.4  图像单位(像素) 2

1.1.5  图像分辨率 3

1.1.6  屏幕分辨率 3

1.1.7  图像的灰度 4

1.1.8  灰度级 4

1.1.9  图像深度 4

1.1.10  二值图像 5

1.1.11  灰度图 5

1.1.12  彩色图像 5

1.1.13  通道 6

1.1.14  图像存储 6

1.2  图像噪声 6

1.2.1  图像噪声的定义 6

1.2.2  图像噪声的来源 7

1.2.3  图像噪声的滤除 7

1.3  图像处理 8

1.3.1  图像处理的分类 8

1.3.2  数字图像处理 9

1.3.3  数字图像处理常用的方法 9

1.3.4  图像处理的应用 12

1.4  图像信号处理层次 12

1.5  计算机视觉 13

1.5.1  计算机视觉的概念 13

1.5.2  计算机视觉系统的构成和分类 14

1.5.3  机器视觉的优势 14

1.5.4  机器视觉系统的应用 14

1.5.5  计算机视觉与相关学科的关系 15

1.6  OpenCV概述 15

1.7  Qt简介 17

第2章  搭建OpenCV开发环境 19

2.1  Windows下搭建OpenCV开发环境 19

2.1.1  下载和安装Qt 19

2.1.2  下载和解压OpenCV 26

2.1.3  了解构建工具 27

2.1.4  下载和安装CMake 28

2.1.5  生成Makefile文件 30

2.1.6  开始编译OpenCV 33

2.1.7  Qt开发的第一个OpenCV程序 34

2.2  Linux下搭建OpenCV开发环境 38

2.2.1  准备编译OpenCV所需依赖 39

2.2.2  编译OpenCV源码 40

2.2.3  Linux下的第一个OpenCV程序 43

2.2.4  下载Qt 46

2.2.5  安装依赖包 46

2.2.6  安装Qt 47

2.2.7  Linux下用Qt开发OpenCV 51

2.2.8  做个快照 54

2.3  数学函数 55

2.4  OpenCV架构 56

2.5  图像输入输出模块imgcodecs 57

2.5.1  imread读取图像文件 58

2.5.2  imwrite保存图片 60

2.6  OpenCV界面编程 62

2.6.1  新建窗口并显示 62

2.6.2  单窗口显示多幅图像 64

2.6.3  销毁窗口 66

2.6.4  调整窗口大小 68

2.6.5  鼠标事件 69

2.6.6  键盘事件 71

2.6.7  滑动条事件 73

第3章  核心模块Core 76

3.1  矩阵操作 76

3.1.1  矩阵类Mat 76

3.1.2  构造法 78

3.1.3  直接赋值法 82

3.1.4  数组法 82

3.1.5  create函数法 83

3.1.6  定义特殊矩阵 83

3.1.7  得到矩阵的行数、列数和维数 84

3.1.8  矩阵的数据指针及其打印 85

3.1.9  创建新的矩阵头 86

3.1.10  得到矩阵通道数 88

3.1.11  复制矩阵 88

3.1.12  判断矩阵是否有元素 93

3.1.13  矩阵的5种遍历方式 93

3.1.14  设置矩阵新值 100

3.1.15  得到矩阵的元素总个数 100

3.1.16  矩形类Rect 100

3.2  数组的操作 101

3.3  读写XML和YAML文件 105

3.3.1  YAML文件简介 105

3.3.2  写入和读取YAML\XML文件的基本步骤 106

3.3.3  XML、YAML文件的打开 106

3.3.4  文本和数字的输入和输出 106

3.3.5  OpenCV数据结构的输入和输出 106

3.3.6  vector(arrays)和maps的输入和输出 107

3.3.7  文件关闭 107

第4章  图像处理模块基础 113

4.1  颜色变换cvtColor 113

4.2  画基本图形 115

4.2.1  点的表示 115

4.2.2  画矩形 116

4.2.3  画圆 117

4.2.4  画椭圆 119

4.2.5  画线段 122

4.2.6  填充多边形 122

4.3  像素存放类Scalar 124

4.4  使用随机数 126

4.4.1  产生一个随机数 128

4.4.2  返回下一个随机数 130

4.4.3  用随机数填充矩阵 131

4.5  文字绘制 132

4.6  为图像添加边框 139

4.7  在图像中查找轮廓 142

第5章  灰度变换和直方图修正 149

5.1  点运算 149

5.1.1  基本概念 149

5.1.2  点运算的目标 150

5.1.3  点运算的分类 150

5.1.4  点运算的特点 150

5.1.5  点运算的应用 150

5.2  灰度变换 151

5.2.1  灰度变换概述 151

5.2.2  灰度变换的作用 152

5.2.3  灰度变换的方法 152

5.2.4  灰度化 152

5.2.5  对比度 155

5.2.6  灰度的线性变换 155

5.2.7  分段线性灰度变换 160

5.2.8  对数变换和反对数变换 165

5.2.9  幂律变换 170

5.3  直方图修正 172

5.3.1  直方图的概念 172

5.3.2  OpenCV实现灰度直方图 173

5.3.3  直方图均衡化 175

第6章  图像平滑 181

6.1  平滑处理算法 181

6.2  线性滤波 183

6.2.1  归一化方框滤波器 183

6.2.2  高斯滤波器 185

6.3  非线性滤波 188

6.3.1  中值滤波 188

6.3.2  双边滤波 189

第7章  几何变换 193

7.1  几何变换基础 193

7.2  图像平移 196

7.3  图像旋转 198

7.4  仿射变换 204

7.5  图像缩放 207

7.5.1  缩放原理 207

7.5.2  OpenCV中的缩放 209

第8章  图像边缘检测 211

8.1  图像边缘检测概述 211

8.2  边缘检测研究的历史现状 213

8.3  边缘定义及类型分析 214

8.4  梯度的概念 216

8.5  图像边缘检测的应用 216

8.6  目前边缘检测存在的问题 217

8.7  边缘检测的基本思想 218

8.8  图像边缘检测的步骤 219

8.9  经典图像边缘检测算法 220

8.9.1  差分边缘检测 221

8.9.2  Roberts算子 223

8.9.3  Sobel算子边缘检测 225

8.9.4  Prewitt算子边缘检测 227

8.9.5  LoG边缘检测算子 230

8.9.6  边缘检测的新技术与方法 235

第9章  图像分割 238

9.1  图像分割概述 238

9.2  图像分割的应用 240

9.3  图像分割的数学定义 240

9.4  图像分割方法的分类 241

9.4.1  基于阈值化的分割方法 242

9.4.2  基于边缘的分割方法 243

9.4.3  基于区域的分割方法 243

9.4.4  基于神经网络的分割方法 245

9.4.5  基于聚类的分割方法 246

9.5  使用OpenCV进行图像分割 246

9.5.1  阈值分割 246

9.5.2  固定阈值分割 247

9.5.3  自适应阈值分割 250

9.6  彩色图像分割 256

9.7  grabCut算法分割图像 259

9.7.1  基本概念 259

9.7.2  grabCut函数 260

9.8  floodFill(漫水填充)分割 263

9.8.1  基本概念 263

9.8.2  floodFill函数 264

9.9  分水岭分割法 270

9.9.1  基本概念 270

9.9.2  wathershed函数 271

第10章  图像金字塔 279

10.1  图像金字塔概述 279

10.2  高斯金字塔 280

10.2.1  向下采样 281

10.2.2  向上采样 284

10.3  拉普拉斯金字塔 286

第11章  图像形态学 288

11.1  图像形态学概述 288

11.2  形态学的应用 288

11.2.1  数学上的形态学 289

11.2.2  格 289

11.2.3  拓扑学 289

11.2.4  数学形态学的组成 290

11.2.5  数学形态学的应用 290

11.2.6  操作分类 291

11.3  结构元素 291

11.4  膨胀 291

11.5  腐蚀 292

11.6  开运算 294

11.7  闭运算 295

11.8  实现腐蚀和膨胀 296

11.9  开闭运算和顶帽黑帽 299

11.10  击中击不中 302

11.11  利用形态学运算提取水平线和垂直线 305

第12章  视频处理 311

12.1  OpenCV视频处理架构 311

12.2  类VideoCapture 312

12.3  构造VideoCapture对象 312

12.4  判断视频是否打开成功 313

12.5  读取视频帧 314

12.6  播放视频文件 314

12.7  获取和设置视频属性 316

12.8  播放摄像头视频 319

12.9  录制视频类VideoWriter 321

12.9.1  构造VideoWriter对象 321

12.9.2  初始化或重新初始化 322

12.9.3  连接一个fourcc代码 322

12.10  实现一个视频播放器 324

第13章  机器学习 330

13.1  机器学习概述 330

13.2  机器学习发展历程 331

13.3  机器学习研究现状 332

13.3.1  传统机器学习的研究现状 333

13.3.2  大数据环境下机器学习的研究现状 334

13.4  机器学习的分类 334

13.4.1  基于学习策略的分类 335

13.4.2  基于学习方法的分类 335

13.4.3  基于学习方式的分类 336

13.4.4  基于数据形式的分类 336

13.4.5  基于学习目标的分类 336

13.5  机器学习常见算法 336

13.6  机器学习的研究内容 338

13.7  机器学习的应用 339

13.8  OpenCV中的机器学习 340

13.8.1  支持向量机 341

13.8.2  贝叶斯分类器 345

第14章  数字水印 348

14.1  数字水印概述 348

14.1.1  数字水印的特点 349

14.1.2  图像数字水印 349

14.1.3  数字水印原理 349

14.1.4  嵌入过程 350

14.1.5  提取过程 350

14.2  相关函数 351

14.3  代码实现数字水印 354

第15章  图像加密和解密 357

15.1  图像加密和解密原理 357

15.2  相关函数 358

15.3  代码实现图像加解密 359

第16章  物体计数 361

16.1  物体计数基本原理 361

16.2  在图像上绘制文字 361

16.3  代码实现药片计数 364

第17章  图像轮廓 367

17.1  图像轮廓概述 367

17.2  应用场景 368

17.3  OpenCV中的轮廓函数 368

17.3.1  查找轮廓findContours 368

17.3.2  轮廓的基本属性 369

17.3.3  绘制轮廓drawContours 370

17.3.4  求轮廓面积contourArea 370

17.4  实战轮廓函数 371

17.5  实战黑白翻转 373

第18章  手势识别 375

18.1  手势识别概述 375

18.2  凸包和凸包检测 375

18.2.1  查找凸包的示例 378

18.2.2  凸缺陷及其意义 381

18.3  手势识别原理 387

18.4  区分手势0和1 390

18.5  区分手势2到5 392

第19章  停车场车牌识别系统 397

19.1  车牌识别技术概述 397

19.2  车牌识别技术的宏观分析 398

19.2.1  国外技术分析 398

19.2.2  国内技术分析 400

19.2.3  车牌识别技术的难点 401

19.2.4  车牌识别系统的开发思路 401

19.3  车牌定位技术 402

19.3.1  车牌特征概述 402

19.3.2  车牌定位方法 403

19.3.3  车牌图像预处理 407

19.3.4  车牌图像的灰度化 407

19.3.5  车牌图像的直方图均衡化 408

19.3.6  车牌图像的滤波 410

19.3.7  车牌图像的二值化 411

19.3.8  车牌图像的边缘检测 411

19.3.9  车牌图像的灰度映射 412

19.3.10  车牌图像的改进型投影法定位 412

19.4  车牌字符分割技术 414

19.4.1  常用车牌字符分割算法 414

19.4.2  车牌倾斜问题 416

19.4.3  车牌倾斜度检测方法 416

19.4.4  车牌倾斜度校正方法 417

19.4.5  车牌边框和铆钉的去除 417

19.4.6  车牌字符分割 417

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

19.4.8  粘连车牌字符的分割 419

19.4.9  断裂车牌字符的合并 420

19.4.10  对车牌字符的切分结果进行确认 420

19.5  车牌字符识别技术 421

19.5.1  模式识别 421

19.5.2  字符识别 422

19.5.3  汉字识别 424

19.6  系统设计 424

19.7  系统拓扑结构 426

19.8  停车场端的详细设计 426

19.9  办公室端的详细设计 433

19.9.1  创建项目 433

19.9.2  设计界面 433

19.9.3  实现构造函数 434

19.9.4  文件信息类MyFileInfo 435

19.9.5  实现连接服务器函数 436

19.9.6  关联按钮槽函数 437

19.9.7  实现文件下载功能 437

19.9.8  接收文件信息 438

19.9.9  接收文件数据 440

19.9.10  图像处理相关的成员变量 441

19.9.11  实现打开文件 441

19.9.12  实现图像二值化 442

19.9.13  实现定位车牌 444

19.9.14  实现分割字符 447

19.9.15  实现识别结果 452

19.9.16  运行程序 455