OpenCV是一个开源、跨平台的计算机视觉库,近年来成为了初学者快速入门计算机视觉的首选工具之一。本书旨在让读者快速实现从入门到掌握这一工具。
本书首先通过编写实用案例来描述OpenCV图像处理的过程,围绕案例,解析在图像处理过程中所使用的功能函数,说明其中参数调用配置、使用函数的原理及其应用的场景,并且解析函数调用的细节,让读者在学习实用案例的过程中逐渐掌握不同功能函数的用法、用途,明白其中所使用的条件;其次,通过展示OpenCV库进行图像和视频的采集、处理和分析的流程,让读者了解、学习图像处理的具体流程框架以及逻辑顺序,与案例共同解析,感受到真实项目中所涉及的应用过程。本书先让读者了解案例,再分析案例中的函数调用,让读者对OpenCV图像处理操作在实际项目中的具体应用过程有更加直观的感受,这也是本书的亮眼部分。
本书适合计算机及模式识别、机械电子工程、自动化等相关领域的科研人员和工程技术人员参考使用,也可作为高等学校智能感知工程、机械电子工程、电子信息、自动化、计算机等相关专业的本科生和研究生的教学和参考用书。
基础知识篇
第1章 C++语言介绍 002
1.1 C++语言程序设计 002
1.1.1 变量的定义和赋值 002
1.1.2 数据类型和运算符 003
1.1.3 输入与输出 004
1.2 C++语言基本结构 004
1.2.1 顺序结构 004
1.2.2 选择结构 005
1.2.3 循环结构 006
1.3 C++程序基本结构 007
1.3.1 头文件 007
1.3.2 命名空间 007
1.3.3 全局变量 008
1.3.4 main()函数 009
1.3.5 局部变量 011
1.3.6 函数 011
1.3.7 注释 012
第2章 OpenCV 概述 014
2.1 OpenCV 介绍 014
2.2 机器视觉与OpenCV 发展史 015
2.2.1 机器视觉发展史 015
2.2.2 OpenCV发展史 016
2.3 OpenCV 的应用与前景 017
第3章 OpenCV 的环境搭建 018
3.1 OpenCV 4.7.0 简介 018
3.2 安装OpenCV 的准备工作 018
3.3 安装步骤 021
3.4 安装环境配置 023
OpenCV 基础应用篇
第4章 图像与视频的读取 028
4.1 读取图像 028
4.2 读取视频 029
4.3 调用摄像头 030
4.4 功能函数 031
4.4.1 Mat类对象 031
4.4.2 VideoCapture类对象 031
4.4.3 读取图片、视频功能函数“imread” 032
4.4.4 图片、视频和摄像头显示功能函数“imshow” 032
4.4.5 图像刷新功能函数“waitKey” 032
4.5 代码演示 033
第5章 图像和视频的保存 035
5.1 保存目标图像 035
5.2 图像保存功能函数“imwrite” 035
5.3 图像保存代码演示 036
5.4 保存目标视频 036
5.5 视频保存功能函数 037
5.5.1 视频宽度属性函数“CAP_PROP_FRAME_WIDTH” 037
5.5.2 视频高度属性函数“CAP_PROP_FRAME_HEIGHT” 038
5.5.3 视频总帧数属性函数“CAP_PROP_FRAME_COUNT” 038
5.5.4 视频帧率属性函数“CAP_PROP_FPS” 038
5.5.5 VideoWriter类对象 038
5.5.6 视频文件关闭释放函数“release” 039
5.6 视频保存代码演示 040
第6章 图像的预处理操作 042
6.1 图像颜色空间转换 042
6.1.1 图像灰度变换 042
6.1.2 颜色空间转换函数“cvtColor” 044
6.1.3 图像灰度变换代码演示 045
6.2 高斯模糊 045
6.2.1 高斯模糊函数“GaussianBlur” 047
6.2.2 高斯模糊代码演示 048
6.3 中值滤波 048
6.3.1 中值滤波函数“medianBlur” 049
6.3.2 中值滤波代码演示 050
6.4 边缘检测 050
6.4.1 边缘检测函数“Canny” 052
6.4.2 边缘检测流程代码演示 053
6.5 图像的腐蚀与膨胀 053
6.5.1 图像二值化函数“threshold” 055
6.5.2 OTSU算法 056
6.5.3 TRIANGLE (三角法)算法 058
6.5.4 获取结构元素函数“getStructuringElement” 059
6.5.5 图像的膨胀操作函数“dilate” 060
6.5.6 图像的腐蚀操作函数“erode” 060
6.5.7 图像的膨胀与腐蚀操作代码演示 061
第7章 图像的绘制 063
7.1 创建、绘制自定义图像 063
7.2 功能函数 065
7.2.1 图像创建函数“Mat” 065
7.2.2 圆形绘制函数“circle” 066
7.2.3 矩形绘制函数“rectangle” 066
7.2.4 文本放置函数“putText” 067
7.3 代码演示 068
OpenCV 进阶篇
第8章 获得翘曲图片 070
8.1 目标图像 070
8.2 获得目标像素点坐标 071
8.3 创建结果像素点坐标 071
8.4 获得图像透视变换矩阵 072
8.5 图像透视变换 072
8.5.1 获取透视变换矩阵函数“getPerspectiveTransform” 073
8.5.2 透视变换函数“warpPerspective” 073
8.6 案例优化 074
8.7 代码演示 075
第9章 几何形状检测 076
9.1 目标图像 076
9.2 图像的预处理 076
9.3 构建检测识别模块 078
9.3.1 形状轮廓检测标记功能 078
9.3.2 形状轮廓判断标识功能 079
9.4 功能函数 080
9.4.1 轮廓查找函数“findContours” 080
9.4.2 弧长计算函数“arcLength” 082
9.4.3 多边形拟合函数“approxPolyDP” 082
9.4.4 边界矩形函数“boundingRect” 083
9.4.5 轮廓绘制函数“drawContours” 083
9.5 案例优化 084
9.6 代码演示 085
第10章 人脸检测 088
10.1 目标图像 088
10.2 人脸识别相关概念 089
10.2.1 级联分类器 089
10.2.2 Haar人脸特征 089
10.2.3 积分图加速法 090
10.2.4 AdaBoost学习算法 090
10.2.5 强分类器的级联 092
10.3 利用级联分类器进行人脸识别 092
10.4 功能函数 093
10.4.1 CascadeClassifier 093
10.4.2 detectMultiScale 094
10.5 代码演示 095
OpenCV 提高篇
第11章 创建颜色选择器 098
11.1 使用VS 2017 创建颜色选择器 098
11.1.1 创建调节面板 098
11.1.2 HSV颜色空间 099
11.1.3 创建颜色遮罩窗口与视频捕捉窗口 100
11.1.4 功能函数 101
11.1.5 案例优化 103
11.1.6 代码演示 104
11.2 使用VS Code 创建颜色选择器 105
11.2.1 调用摄像头 106
11.2.2 视频翻转 107
11.2.3 进行颜色空间转换 108
11.2.4 设置颜色通道 111
11.2.5 创建遮罩 112
11.2.6 创建窗口 114
11.2.7 创建Trackbar 115
11.2.8 调节各个颜色通道值 116
11.2.9 代码演示 118
第12章 跟踪、绘制颜色路径 122
12.1 使用VS 2017 跟踪、绘制颜色路径 122
12.1.1 寻找目标颜色,获取颜色轮廓 123
12.1.2 获取颜色轮廓关键点向量 123
12.1.3 绘制关键点的行动路径 124
12.1.4 案例优化 124
12.1.5 代码演示 125
12.2 使用VS Code 跟踪、绘制颜色路径 128
12.2.1 调用摄像头 128
12.2.2 视频翻转 129
12.2.3 进行颜色空间转换 130
12.2.4 设置颜色通道 130
12.2.5 创建遮罩 131
12.2.6 创建窗口 132
12.2.7 创建Trackbar 133
12.2.8 确定目标颜色通道值 135
12.2.9 定义矩阵向量 135
12.2.10 进行颜色空间转换 136
12.2.11 轮廓检测 137
12.2.12 过滤干扰项 138
12.2.13 轮廓绘制 142
12.2.14 矩形绘制 144
12.2.15 创建遮罩 145
12.2.16 颜色检测 145
12.2.17 圆形绘制 145
12.2.18 轨迹绘制 146
12.2.19 代码演示 147
第13章 文档扫描 150
13.1 VS 2017 文档扫描 150
13.1.1 图像的预处理 150
13.1.2 轮廓获取 151
13.1.3 角点获取 153
13.1.4 文档翘曲 154
13.1.5 案例优化 155
13.1.6 代码演示 155
13.2 VS Code 文档扫描 158
13.2.1 读取目标图像 158
13.2.2 预处理:高斯模糊 159
13.2.3 预处理:边缘检测 160
13.2.4 预处理:膨胀操作 163
13.2.5 预处理:腐蚀操作 165
13.2.6 定义矩阵向量 166
13.2.7 轮廓检测 167
13.2.8 过滤干扰项 167
13.2.9 得到轮廓 168
13.2.10 轮廓坐标点排序 169
13.2.11 获得图像透视变换矩阵 170
13.2.12 图像透视变换 172
13.2.13 显示结果图像 173
13.2.14 代码演示 173
OpenCV 技术篇
第14章 OpenCV 与机器学习 178
14.1 传统机器学习 178
14.1.1 逻辑回归 178
14.1.2 K近邻 179
14.1.3 支持向量机(SVM) 179
14.1.4 贝叶斯网络 180
14.2 OpenCV 与深度学习 180
14.2.1 用GoogLeNet模型实现图像分类 181
14.2.2 用SSD模型实现对象检测 181
14.2.3 用FCN模型实现图像分割 182
14.2.4 用CNN模型预测年龄和性别 182
14.2.5 用GOTURN模型实现对象跟踪 182
第15章 基于深度学习的路面病害检测案例 184
15.1 深度学习在路面病害检测中的应用背景 184
15.2 数据集构建 184
15.3 基于DeepLabV3+的路面病害检测方法 187
15.3.1 模型改进 187
15.3.2 评价指标 189
15.3.3 模型训练与测试 190
15.3.4 不同模型的对比实验 191
15.3.5 不同模型检测病害的可视化效果对比 192
参考文献 194