《OpenCV3编程入门》PDF下载

  • 购买积分:20 如何计算积分?
  • 作  者:毛星云
  • 出 版 社:
  • 出版年份:2015
  • ISBN:
  • 页数:0 页
图书介绍:

第一部分 快速上手OpenCV 1

第1章 邂逅OpenCV 3

1.1 OpenCV周边概念认知 4

1.1.1 图像处理、计算机视觉与OpenCV 4

1.1.2 OpenCV概述 4

1.1.3 起源及发展 5

1.1.4 应用概述 6

1.2 OpenCV基本架构分析 7

1.3 OpenCV3带来了什么 11

1.3.1 项目架构的改变 11

1.3.2 将OpenCV2代码升级到OpenCV3报错时的一些策略 12

1.4 OpenCV的下载、安装与配置 14

1.4.1 预准备:下载和安装集成开发环境 14

1.4.2 第一步:下载和安装OpenCV SDK 15

1.4.3 第二步:配置环境变量 16

1.4.4 第三步:工程包含(include)目录的配置 17

1.4.5 第四步:工程库(lib)目录的配置 21

1.4.6 第五步:链接库的配置 22

1.4.7 第六步:在Windows文件夹下加入OpenCV动态链接库 25

1.4.8 第七步:最终测试 26

1.4.9 可能遇到的问题和解决方案 27

1.5 快速上手OpenCV图像处理 28

1.5.1 第一个程序:图像显示 29

1.5.2 第二个程序:图像腐蚀 30

1.5.3 第三个程序:图像模糊 31

1.5.4 第四个程序:canny边缘检测 32

1.6 OpenCV视频操作基础 34

1.6.1 读取并播放视频 34

1.6.2 调用摄像头采集图像 35

1.7 本章小结 38

第2章 启程前的认知准备 39

2.1 OpenCV官方例程引导与赏析 40

2.1.1 彩色目标跟踪:Camshift 41

2.1.2 光流:optical flow 42

2.1.3 点追踪:lkdemo 43

2.1.4 人脸识别:obj ectDetection 43

2.1.5 支持向量机引导 44

2.2 开源的魅力:编译OpenCV源代码 45

2.2.1 下载安装CMake 45

2.2.2 使用CMake生成OpenCV源代码工程的解决方案 46

2.2.3 编译OpenCV源代码 50

2.3 “opencv.hpp”头文件认知 53

2.4 命名规范约定 54

2.5 argc与argv参数解惑 56

2.5.1 初识main函数中的argc和argv 56

2.5.2 argc、argv的具体含义 57

2.5.3 Visual Studio中main函数的几种写法说明 58

2.5.4 总结 59

2.6 格式输出函数printf()简析 59

2.6.1 格式输出:printf()函数 59

2.6.2 示例程序:printf函数的用法示例 60

2.7 智能显示当前使用的OpenCV版本 61

2.8 本章小结 61

第3章 HighGUI图形用户界面初步 63

3.1 图像的载入、显示和输出到文件 64

3.1.1 OpenCV的命名空间 64

3.1.2 Mat类简析 64

3.1.3 图像的载入与显示概述 65

3.1.4 图像的载入:imread()函数 65

3.1.5 图像的显示:imshow()函数 66

3.1.6 关于InputArray类型 67

3.1.7 创建窗口:namedWindow()函数 67

3.1.8 输出图像到文件:imwrite()函数 68

3.1.9 综合示例程序:图像的载入、显示与输出 70

3.2 滑动条的创建和使用 73

3.2.1 创建滑动条:createTrackbar()函数 73

3.2.2 获取当前轨迹条的位置:getTrackbarPos()函数 76

3.3 鼠标操作 76

3.4 本章小结 80

第二部分 初探core组件 83

第4章 OpenCV数据结构与基本绘图 85

4.1 基础图像容器Mat 86

4.1.1 数字图像存储概述 86

4.1.2 Mat结构的使用 86

4.1.3 像素值的存储方法 88

4.1.4 显式创建Mat对象的七种方法 89

4.1.5 OpenCV中的格式化输出方法 91

4.1.6 输出其他常用数据结构 94

4.1.7 示例程序:基础图像容器Mat类的使用 95

4.2 常用数据结构和函数 95

4.2.1 点的表示:Point类 96

4.2.2 颜色的表示:Scalar类 96

4.2.3 尺寸的表示:Size类 96

4.2.4 矩形的表示:Rect类 97

4.2.5 颜色空间转换:cvtColor()函数 98

4.2.6 其他常用的知识点 100

4.3 基本图形的绘制 100

4.3.1 DrawEllipse()函数的写法 101

4.3.2 DrawFilledCircle()函数的写法 102

4.3.3 DrawPolygon() 函数的写法 102

4.3.4 DrawLine()函数的写法 103

4.3.5 main函数的写法 104

4.4 本章小结 106

第5章 core组件进阶 107

5.1 访问图像中的像素 108

5.1.1 图像在内存之中的存储方式 108

5.1.2 颜色空间缩减 108

5.1.3 LUT函数:Look up table操作 109

5.1.4 计时函数 110

5.1.5 访问图像中像素的三类方法 110

5.1.6 示例程序 114

5.2 ROI区域图像叠加&图像混合 114

5.2.1 感兴趣区域:ROI 115

5.2.2 线性混合操作 116

5.2.3 计算数组加权和:addWeighted()函数 117

5.2.4 综合示例:初级图像混合 120

5.3 分离颜色通道、多通道图像混合 125

5.3.1 通道分离:split()函数 125

5.3.2 通道合并:merge()函数 126

5.3.3 示例程序:多通道图像混合 127

5.4 图像对比度、亮度值调整 131

5.4.1 理论依据 131

5.4.2 访问图片中的像素 131

5.4.3 示例程序:图像对比度、亮度值调整 132

5.5 离散傅里叶变换 135

5.5.1 离散傅里叶变换的原理 135

5.5.2 dft()函数详解 136

5.5.3 返回DFT最优尺寸大小:getOptimalDFTSize()函数 137

5.5.4 扩充图像边界:copyMakeBorder函数 137

5.5.5 计算二维矢量的幅值:magnitude()函数 138

5.5.6 计算自然对数:log()函数 138

5.5.7 矩阵归一化:normalize()函数 138

5.5.8 示例程序:离散傅里叶变换 139

5.6 输入输出XML和YAML文件 144

5.6.1 XML和YAML文件简介 144

5.6.2 FileStorage类操作文件的使用引导 144

5.6.3 示例程序:XML和YAML文件的写入 147

5.6.4 示例程序:XML和YAML文件的读取 148

5.7 本章小结 150

第三部分 掌握imgproc组件 151

第6章 图像处理 153

6.1 线性滤波:方框滤波、均值滤波、高斯滤波 154

6.1.1 平滑处理 154

6.1.2 图像滤波与滤波器 154

6.1.3 线性滤波器的简介 155

6.1.4 滤波和模糊 155

6.1.5 邻域算子与线性邻域滤波 155

6.1.6 方框滤波(box Filter) 156

6.1.7 均值滤波 157

6.1.8 高斯滤波 159

6.1.9 线性滤波相关OpenCV源码剖析 160

6.1.10 OpenCV中GaussianBlur函数源码剖析 164

6.1.11 线性滤波核心API函数 165

6.1.12 图像线性滤波综合示例 170

6.2 非线性滤波:中值滤波、双边滤波 175

6.2.1 非线性滤波概述 175

6.2.2 中值滤波 175

6.2.3 双边滤波 177

6.2.4 非线性滤波相关核心API函数 178

6.2.5 OpenCV中的5种图像滤波综合示例 181

6.3 形态学滤波(1):腐蚀与膨胀 187

6.3.1 形态学概述 187

6.3.2 膨胀 188

6.3.3 腐蚀 189

6.3.4 相关OpenCV源码分析溯源 190

6.3.5 相关核心API函数讲解 191

6.3.6 综合示例:腐蚀与膨胀 195

6.4 形态学滤波(2):开运算、闭运算、形态学梯度、顶帽、黑帽 198

6.4.1 开运算 199

6.4.2 闭运算 200

6.4.3 形态学梯度 200

6.4.4 顶帽 201

6.4.5 黑帽 202

6.4.6 形态学滤波OpenCV源码分析溯源 203

6.4.7 核心API函数:morPhologyEx() 205

6.4.8 各形态学操作使用范例一览 206

6.4.9 综合示例:形态学滤波 208

6.5 漫水填充 214

6.5.1 漫水填充的定义 214

6.5.2 漫水填充法的基本思想 214

6.5.3 实现漫水填充算法:floodFill函数 214

6.5.4 综合示例:漫水填充 216

6.6 图像金字塔与图片尺寸缩放 223

6.6.1 引言 223

6.6.2 关于图像金字塔 223

6.6.3 高斯金字塔 225

6.6.4 拉普拉斯金字塔 226

6.6.5 尺寸调整:resize()函数 227

6.6.6 图像金字塔相关API函数 230

6.6.7 综合示例:图像金字塔与图片尺寸缩放 234

6.7 阈值化 237

6.7.1 固定阈值操作:Threshold()函数 238

6.7.2 自适应阈值操作:adaptiveThreshold()函数 239

6.7.3 示例程序:基本阈值操作 240

6.8 本章小结 244

第7章 图像变换 247

7.1 基于OpenCV的边缘检测 248

7.1.1 边缘检测的一般步骤 248

7.1.2 canny算子 248

7.1.3 sobel算子 253

7.1.4 Laplacian算子 256

7.1.5 scharr滤波器 259

7.1.6 综合示例:边缘检测 262

7.2 霍夫变换 267

7.2.1 霍夫变换概述 267

7.2.2 OpenCV中的霍夫线变换 268

7.2.3 霍夫线变换的原理 268

7.2.4 标准霍夫变换:HoughLines()函数 270

7.2.5 累计概率霍夫变换:HoughLinesP()函数 272

7.2.6 霍夫圆变换 274

7.2.7 霍夫梯度法的原理 275

7.2.8 霍夫梯度法的缺点 276

7.2.9 霍夫圆变换:HoughCircles()函数 276

7.2.10 综合示例:霍夫变换 278

7.3 重映射 281

7.3.1 重映射的概念 281

7.3.2 实现重映射:remap()函数 282

7.3.3 基础示例程序:基本重映射 283

7.3.4 综合示例程序:实现多种重映射 285

7.4 仿射变换 289

7.4.1 认识仿射变换 289

7.4.2 仿射变换的求法 290

7.4.3 进行仿射变换:warpAffine()函数 291

7.4.4 计算二维旋转变换矩阵:getRotationMatrix2D()函数 292

7.4.5 示例程序:仿射变换 292

7.5 直方图均衡化 295

7.5.1 直方图均衡化的概念和特点 296

7.5.2 实现直方图均衡化:equalizeHist()函数 297

7.5.3 示例程序:直方图均衡化 298

7.6 本章小结 300

第8章 图像轮廓与图像分割修复 303

8.1 查找并绘制轮廓 304

8.1.1 寻找轮廓:findContours()函数 304

8.1.2 绘制轮廓:drawContours()函数 305

8.1.3 基础示例程序:轮廓查找 306

8.1.4 综合示例程序:查找并绘制轮廓 308

8.2 寻找物体的凸包 312

8.2.1 凸包 312

8.2.2 寻找凸包:convexHull()函数 313

8.2.3 基础示例程序:凸包检测基础 313

8.2.4 综合示例程序:寻找和绘制物体的凸包 315

8.3 使用多边形将轮廓包围 318

8.3.1 返回外部矩形边界:boundingRect()函数 318

8.3.2 寻找最小包围矩形:minAreaRect()函数 318

8.3.3 寻找最小包围圆形:minEnclosingCircle()函数 318

8.3.4 用椭圆拟合二维点集:fitEllipse()函数 319

8.3.5 逼近多边形曲线:approxPolyDP()函数 319

8.3.6 基础示例程序:创建包围轮廓的矩形边界 319

8.3.7 基础示例程序:创建包围轮廓的圆形边界 321

8.3.8 综合示例程序:使用多边形包围轮廓 324

8.4 图像的矩 327

8.4.1 矩的计算:moments()函数 328

8.4.2 计算轮廓面积:contourArea()函数 328

8.4.3 计算轮廓长度:arcLength()函数 328

8.4.4 综合示例程序:查找和绘制图像轮廓矩 329

8.5 分水岭算法 333

8.5.1 实现分水岭算法:watershed()函数 334

8.5.2 综合示例程序:分水岭算法 334

8.6 图像修补 338

8.6.1 实现图像修补:inpaint()函数 340

8.6.2 综合示例程序:图像修补 341

8.7 本章小结 343

第9章 直方图与匹配 345

9.1 图像直方图概述 346

9.2 直方图的计算与绘制 347

9.2.1 计算直方图:calcHist()函数 347

9.2.2 找寻最值:minMaxLoc()函数 348

9.2.3 示例程序:绘制H—S直方图 348

9.2.4 示例程序:计算并绘制图像一维直方图 350

9.2.5 示例程序:绘制RGB三色直方图 352

9.3 直方图对比 355

9.3.1 对比直方图:compareHist()函数 355

9.3.2 示例程序:直方图对比 356

9.4 反向投影 360

9.4.1 引言 360

9.4.2 反向投影的工作原理 360

9.4.3 反向投影的作用 361

9.4.4 反向投影的结果 361

9.4.5 计算反向投影:calcBackProject()函数 361

9.4.6 通道复制:mixChannels()函数 362

9.4.7 综合程序:反向投影 363

9.5 模板匹配 367

9.5.1 模板匹配的概念与原理 367

9.5.2 实现模板匹配:matchTemplate()函数 367

9.5.3 综合示例:模板匹配 369

9.6 本章小结 373

第四部分 深入feature2d组件 375

第10章 角点检测 377

10.1 Harris角点检测 378

10.1.1 兴趣点与角点 378

10.1.2 角点检测 378

10.1.3 harris角点检测 379

10.1.4 实现Harris角点检测:cornerHarris()函数 379

10.1.5 综合示例:harris角点检测与绘制 381

10.2 Shi-Tomasi角点检测 384

10.2.1 Shi-Tomasi角点检测概述 384

10.2.2 确定图像强角点:goodFeaturesToTrack()函数 384

10.2.3 综合示例:Shi-Tomasi角点检测 385

10.3 亚像素级角点检测 388

10.3.1 背景概述 388

10.3.2 寻找亚像素角点:comerSubPix()函数 389

10.3.3 综合示例:亚像素级角点检测 389

10.4 本章小结 392

第11章 特征检测与匹配 395

11.1 SURF特征点检测 396

11.1.1 SURF算法概览 396

11.1.2 SURF算法原理 396

11.1.3 SURF类相关OpenCV源码剖析 400

11.1.4 绘制关键点:drawKeypoints()函数 401

11.1.5 KeyPoint类 402

11.1.6 示例程序:SURF特征点检测 402

11.2 SURF特征提取 405

11.2.1 绘制匹配点:drawMatches()函数 405

11.2.2 BruteForceMatcher类源码分析 407

11.2.3 示例程序:SURF特征提取 408

11.3 使用FLANN进行特征点匹配 410

11.3.1 FlannBasedMatcher类的简单分析 410

11.3.2 找到最佳匹配:DescriptorMatcher::match方法 411

11.3.3 示例程序:使用FLANN进行特征点匹配 411

11.3.4 综合示例程序:FLANN结合SURF进行关键点的描述和匹配 413

11.3.5 综合示例程序:SIFT配合暴力匹配进行关键点描述和提取 417

11.4 寻找己知物体 420

11.4.1 寻找透视变换:findHomography()函数 421

11.4.2 进行透视矩阵变换:perspectiveTransform()函数 421

11.4.3 示例程序:寻找己知物体 422

11.5 ORB特征提取 425

11.5.1 ORB算法概述 425

11.5.2 相关概念认知 425

11.5.3 ORB类相关源码简单分析 426

11.5.4 示例程序:ORB算法描述与匹配 426

11.6 本章小结 430

附录 433

A1配套示例程序清单 433

A2随书额外附赠的程序一览 436

A3书本核心函数清单 439

A4Mat类函数一览 442

A4.1 构造函数:Mat::Mat 442

A4.2 析构函数Mat::~Mat 444

A4.3 Mat类成员函数 444

主要参考文献 447