返回首页
当前位置: 主页 > 分析入门 >

【浅墨著作】《OpenCV3编程入门》内容简介勘误配套源代码下载(2)

时间:2018-02-15 22:42来源:网络整理 作者:采集侠 点击:

  

本书拥有翔实的内容,注释详尽的代码,在计算机视觉领域会是助你通过OpenCV研习计算机视觉理论、撰写论文、通过毕业设计、完成科研项目的得力助手。同时,本书适合作为大学计算机视觉课程的教学用书。

 

初次接触OpenCV、有一定C/C++编程基础的研究人员

作为一本定位为快速入门新版OpenCV标准的编程教程,本书需要的仅仅是一些简单的C/C++编程语言基础。如果你已经有了一些C/C++编程基础,并对计算机视觉感兴趣,那么本书正是为你准备的。

 

已经有过OpenCV1.0编程经验,想快速了解并上手OpenCV2、OpenCV3编程的计算机视觉领域的专业人员

如果你曾经使用过OpenCV1.0,或者研读过OpenCV1.0时代的经典著作《Learning OpenCV》,本书会让你倍感亲切。你会发现新版OpenCV带了更多强大和便利的特性,让你事半功倍,如虎添翼。

 

想拥有一本新版OpenCV接口工具书的计算机视觉爱好者

本书中将自OpenCV2以来(包括OpenCV3)的常用类和函数进行了详细讲解,并在附录中提供了“书本核心函数清单”以便检索。你会在书中快速查找到你需要用到的函数、数据结构和类的用法。

 

想拥有海量的详细注释的OpenCV2、OpenCV3示例程序代码的OpenCV爱好者

本书包含OpenCV2版的95个书本主线示例程序源代码、21个附赠示例程序源代码,OpenCV3版的95个书本主线示例程序源代码。OpenCV2、OpenCV3两版代码提供分开下载。这些程序代码都经过详细而有条理的注释,并提供可以独立运行的exe供快速查看程序效果,方便查看和检索。你会在海量的示例程序中找到你需要的参考代码,加速你的研究和学习。

 

图像处理、计算机视觉领域的业余爱好者

海阔凭鱼跃,天高任鸟飞。计算机视觉领域的宝库任你探索。

 

开源项目爱好者

OpenCV作为一个完全免费并源代码开发的计算机视觉代码库,有总计上百万行的源代码供你研究学习。本书将是引导你学习它们的良师益友。

 

 

 

 

 


四、书本目录

 




第一部分 快速上手OpenCV 1第1章 邂逅OpenCV 31.1 OpenCV周边概念认知 4

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

1.1.2 OpenCV概述 4

1.1.3 起源及发展 5

1.1.4 应用概述 6

1.2 OpenCV基本架构分析 71.3 OpenCV3带来了什么 11

1.3.1 项目架构的改变 11

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

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

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

1.4.2 第一步:下载和安装OpenCVSDK 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章 启程前的认知准备 392.1 OpenCV官方例程引导与赏析 40

2.1.1 彩色目标跟踪:Camshift41

2.1.2 光流:opticalflow 42

2.1.3 点追踪:lkdemo 43

2.1.4 人脸识别:objectDetection43

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”头文件认知 532.4 命名规范约定 542.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版本 612.8 本章小结 61第3章 HighGUI图形用户界面初步 633.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 鼠标操作 763.4 本章小结 80



第二部分 初探core组件 83


第4章 OpenCV数据结构与基本绘图 854.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组件进阶 1075.1 访问图像中的像素 108

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

5.1.2 颜色空间缩减 108

5.1.3 LUT函数:Look uptable操作 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章 图像处理 1536.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 方框滤波(boxFilter) 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章 图像变换 2477.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章 图像轮廓与图像分割修复 3038.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章 直方图与匹配 3459.1 图像直方图概述 3469.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章 角点检测 37710.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 寻找亚像素角点:cornerSubPix()函数 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 配套示例程序清单 433A2 随书额外附赠的程序一览 436A3 书本核心函数清单 439A4 Mat类函数一览 442

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

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

A4.3 Mat类成员函数 444

主要参考文献 447

 

 




五、致谢




首先需要感谢我的导师南京航空航天大学的冷雪飞教授的知遇之恩,她也亲自参与撰写了本书的部分章节。在攻读硕士学位阶段,如果没有导师的谆谆教诲,我不会和OpenCV相遇,也就不会有此书的出版。

感谢我的同门师兄王碧辉与吴松森参与撰写本书的部分章节,为本书的完善做出的卓越贡献。

感谢OpenCV开发团队为世界研发出如此强大且稳定、易用的计算机开源视觉库,并持续不断地对其进行维护与更新。

感谢父母将我养育成人,感谢家人们的嘘寒问暖,你们是我最坚强的后盾。

感谢母校南京航空航天大学赐予我一颗不甘平庸、上下求索的心。

感谢南京航空航天大学的戴泉晨老师对本书出版所做出的帮助与支持。

感谢国家自然科学基金青年科学基金项目“新型单定子二自由度超声电机及其驱动的智能云台系统的关键技术研究”(项目批准号:51205193)对本书理论研究方面提供的经费支持。

感谢电子工业出版社博文视点事业部的陈晓猛和丁一琼编辑对本书的出版所作出的大量的工作。他们对出版物的专业和严谨的态度让我留下了深刻的印象。

最后,需要感谢我博客上的众多读者们,是你们对这本书的期待和热情的留言让我有了完成这本书的动力和勇气。

 

 




六、书本配套示例程序下载









秦先生 『上海买保险』上海:高端医疗 全球医疗 国际医疗保险经纪人 上海外籍人士买保险-高端人士医疗办理
服务项目:国际医疗保险/免现金结算/儿童疫苗/高端国际寿险/高端重疾险
免费热线『上海』:13761630213, QQ:107242375, Email:13761630213@163.com
选择保险事业 为了爱,为了一份坚定的承诺!微信: 咨询站
上海地区请直接拨打本人电话,应约免费上门提供免费保险方案。
Bupa保柏,   Cigna信诺,   MSH法国万欣和,   GBG全球利益集团,   AXA金盛,   Winterthur丰泰 
友情链接: 走在上海人寿保险的前端    医疗保险情报网   Shanghai Insurance    秦先生的个人简历


------分隔线----------------------------
☆ 高端医疗保险超市 微博更新 ☆
上海保险规划师信息
上海保险规划师信息
外籍人士高端医疗方案推荐
保柏 金盛全球
美国安泰atena 招商信诺
seven corners
安联全球医疗 中国人寿
美国国际医疗集团 MSH china
MSH china
美国安泰atena MSH china
美国安泰atena MSH china
免费咨询国际医疗保险
上海买保险
通过网络取得初步咨询
微信备注“保险咨询”
微信咨询
微信咨询
China Expats Medical insurance
上海买保险,高端医疗保险,bupa儿童疫苗,友邦保险,肺炎疫苗,进口疫苗,儿童保险,儿童医疗,医疗保险,中国人寿保险,保险公司,中国平安保险,医疗险,国际医疗保险,自费药,外籍人士医疗,泰康人寿,英国保诚集团,上海综合保险,国际医疗保险,上海社会保险,上海养老保险,北京高端医疗,招商信诺高端医疗,上海太平洋保险,和睦家医院,上海综合保险卡,买保险,高端医疗,重大疾病,意外伤害,定期寿险,家庭理财,友邦保险,美华妇儿,和睦家保险