经过近一年的沉淀和总结,《OpenCV3编程入门》一书最终和大家见面了。
近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容。事实上近期浅墨实在是有些忙,个人独立开发的3D ARPG跨平台游戏App刚刚登陆安卓平台,各大应用商店都须要上架,加之各种学业方面的事情,所以这篇文章直到如今才发出来。
OK,先看看《OpenCV编程入门》这本书的封面。
和出版的第一本书《逐梦旅程》一样,这本书的封面依然是浅墨自己设计的原型和基调。贴一张有图像处理特色的封面图吧:
好了,言归正传。我们来看看这本书的内容。
一、前言
计算机视觉是一个近几年日臻成熟的领域。随着运算性能强劲而又实惠的计算设备的不断问世,创建复杂的图像应用从未像今天这般easy。OpenCV在计算机视觉领域扮演者重要的角色,它是一个基于开源发行的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的非常多通用算法。自1999年问世以来,OpenCV已经被计算机视觉领域的学者和开发人员视为首选的工具,成为了计算机视觉领域最有力的研究工具之中的一个。
OpenCV最初由Intel的一个小组进行开发。在公布一系列的beta版本号后,OpenCV 1.0正式版最终在2006年10月19日公布。
2009年10月1日,OpenCV2.0问世,它带来了全新的C++接口,将OpenCV的能力无限放大。在2.0的时代,OpenCV增加了全新的平台支持,包含iOS和Andriod,通过CUDA和OpenCL实现了GPU加速,为Python和java用户提供了接口,基于Github和Buildbot构建了充满艺术感的持续集成的系统,所以才有了被全世界的非常多公司和学校所採用的稳定易用的OpenCV 2.4.x。
2014年8月21日,OpenCV3.0Alpha公布,带来了全新的项目架构的改变,宣告计算机视觉新时代的来临。和其它大型项目一样,OpenCV3抛弃总体统一架构,使用内核+插件的架构形式,让自身主体更加稳定,而附加的库能够更加灵活多变、保持高速的发展与迭代。
本书源自CSDN上连载的一个名为“【OpenCV】新手教程“的系列博客文章,自2014年2月24日发表第一篇以来,得到了广大OpenCV爱好者的广泛关注与支持,累计阅读量突破了40多万人次。不少读者强烈希望将这些内容集结成书,并增加很多其它新的内容。于是,经过半年的笔耕不辍,便有了如今你手中的这本书的诞生。
作为一本入门级的OpenCV编程教材,本书以具体凝视的程序代码为主线,以新版OpenCV最核心的core、highgui、improc和feature2d这四个组件的相关函数、类和数据结构为出发点,具体解说了学习新版本号OpenCV中会遇到了各种问题,并提供详尽的实战代码參考。本书的写作初衷是让很多其它的使用者能熟练使用採用新版C++接口的OpenCV2或OpenCV3,了解OpenCV2和OpenCV3的诸多细节上的差别,以推动新版OpenCV在世界范围内的普及。
二、内容安排
本书分为四个部分、11个章节,内容梗概列举例如以下:
第1章邂逅OpenCV:介绍OpenCV的周边概念,分析OpenCV的基本架构。解说OpenCV3的新特性。重点解说了OpenCV的下载、安装与配置过程。配置完毕后,带领大家正式開始领略OpenCV的魅力,接触了四个OpenCV图像处理小程序并学习怎样使用OpenCV操作视频和调用摄像头。
第2章启程前的认知准备:进行OpenCV官方例程的引导学习与赏析,解说怎样编译OpenCV的源码,以及对一些周边概念的认知。
第3章HighGui图形用户界面初步: 对图像的加载、显示和输出到文件进行具体的分析,解说OpenCV中滑动条的创建和使用,以及怎样用鼠标进行交互操作。
第4章 OpenCV数据结构与基本画图: 解说OpenCV中经常使用的数据结构以及基本画图操作。
第5章 core组件进阶:解说core模块的一些进阶知识点,如操作图像中的像素、图像混合、分离颜色通道、调节图像的对照度和亮度、进行离散傅里叶变换,以及输入输出XML和YAML文件。
第6章图像处理:学习各种利用OpenCV进行图像处理的方法。包含属于线性滤波的方框滤波、均值滤波与高斯滤波,属于非线性滤波的中值滤波、双边滤波;两种基本形态学操作——膨胀与腐蚀;5种高级形态学滤波操作——开运算、闭运算、形态学梯度、顶帽以及黑帽;以及漫水填充算法、图像金字塔、图像缩放、阈值化。
第7章图像变换:解说多种类型的图像变换方法。包含利用OpenCV进行边缘检測所用到的canny算子、sobel算子,Laplace算子以及scharr滤波器;进行图像特征提取的霍夫线变换、霍夫圆变换,重映射和仿射变换以及直方图均衡化。
第8章图像轮廓与图像切割修复: 解说怎样查找轮并绘制轮廓,了怎样寻找到物体的凸包,使用多边形来包围轮廓,以及计算一个图像的矩。还介绍了分水岭算法和图像修补操作的实现方法。
第9章直方图与匹配:解说图像直方图相关的编程技巧,以及直方图对照、反向投影和模板匹配技术。
第10章 角点检測: 解说Harris角点检測和Shi-Tomasi角点检測,以及一种亚像素角点检測方法。
第11章 特征检測与匹配:使用OpenCV2解说和实现了SURF、SIFT和ORB特征检測方法,并在FLANN特征匹配的基础上,进一步实现了利用Homography映射来找出已知物体。
三、适合阅读本书的读者
- 研究计算机视觉以及相关领域的在校学生和老师
本书拥有翔实的内容,凝视详尽的代码,在计算机视觉领域会是助你通过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 3
1.1 OpenCV周边概念认知 4
1.1.1 图像处理、计算机视觉与OpenCV4
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 第一步:下载和安装OpenCVSDK 15
1.4.3 第二步:配置环境变量 16
1.4.4 第三步:project包含(include)文件夹的配置 17
1.4.5 第四步:project库(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 彩色目标跟踪: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源码project的解决方式 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 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 综合演示样例:0基础图像混合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 方框滤波(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章 图像变换 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 寻找亚像素角点: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 配套演示样例程序清单 433
A2 随书额外附赠的程序一览 436
A3 书本核心函数清单 439
A4 Mat类函数一览 442
A4.1 构造函数:Mat::Mat442
A4.2 析构函数Mat::~Mat444
A4.3 Mat类成员函数 444
主要參考文献 447
五、致谢
首先须要感谢我的导师南京航空航天大学的冷雪飞教授的知遇之恩,她也亲自參与撰写了本书的部分章节。在攻读硕士学位阶段,假设没有导师的谆谆教诲,我不会和OpenCV相遇,也就不会有此书的出版。
感谢我的同门师兄王碧辉与吴松森參与撰写本书的部分章节,为本书的完好做出的卓越贡献。
感谢OpenCV开发团队为世界研发出如此强大且稳定、易用的计算机开源视觉库,并持续不断地对其进行维护与更新。
感谢父母将我养育成人,感谢家人们的嘘寒问暖,你们是我最坚强的后盾。
感谢母校南京航空航天大学赐予我一颗不甘平凡、上下求索的心。
感谢南京航空航天大学的戴泉晨老师对本书出版所做出的帮助与支持。
感谢国家自然科学基金青年科学基金项目“新型单定子二*度超声电机及其驱动的智能云台系统的关键技术研究”(项目批准号:51205193)对本书理论研究方面提供的经费支持。
感谢电子工业出版社博文视点事业部的陈晓猛和丁一琼编辑对本书的出版所作出的大量的工作。他们对出版物的专业和严谨的态度让我留下了深刻的印象。
最后,须要感谢我博客上的众多读者们,是你们对这本书的期待和热情的留言让我有了完毕这本书的动力和勇气。
六、书本配套演示样例程序下载
本书的演示样例程序最初都在OpenCV 2.4.9(2014年4月15日面世)版本号下开发,书稿初版也是基于OpenCV2.4.9而写。在书稿写作和修订过程中,恰逢OpenCV3.0 Alpha(2014年8月21日)和OpenCV3 Beta(2014年11月11日)的公布,所以本书在审校和修订过程中(2014年12月1日),决定站在浪潮之巅,以OpenCV3为主,增加OpenCV3的诸多特性,让这本书能够同一时候胜任OpenCV2和OpenCV3两个版本号教材的角色。这也是为什么本书会有OpenCV2和OpenCV3两个独立版本号的演示样例程序的原因。
100多个、两个版本号、具体凝视的演示样例程序源码是本书的灵魂,现将演示样例程序的相关情况概括例如以下:
- 本书包含OpenCV2版的95个书本主线演示样例程序源码、21个附赠演示样例程序源码,OpenCV3版的95个书本主线演示样例程序源码。
- OpenCV2、OpenCV3两版代码提供分开下载。
- OpenCV2版的演示样例程序在Windows7 64位旗舰版、Visual Stuido 2010 、OpenCV 2.4.9的环境下开发与測试,理论上支持OpenCV 2系列的全部版本号的编译执行。
- OpenCV3版的演示样例程序在Windows7 64位旗舰版、Visual Stuido 2010 、OpenCV3.0 beta的环境下开发与測试,理论上支持眼下已经公布的OpenCV3全版本号。
- 程序源码都经过具体而有条理的凝视。
- 额外提供能够独立执行的exe供高速查看程序效果,方便查看和检索。
配套演示样例代码下载请点这里:
从GitHub下载《OpenCV3编程入门》配套演示样例代码
七、关于勘误
因为浅墨的水平有限,这本书即便经过了多次的校对,也难免会有疏漏之处。希望书本前的你,能够热心地指出书本中错误,评论在这篇博客的下方。大家的评论中提出的书本中的疏漏,浅墨都会细致地核对和修正。以便在这本书下一版印刷的时候,能以一个更完美更严谨的样子,呈如今大家的面前。
最后,愿大家在本书的帮助下,都能非常好地入门和掌握新版OpenCV。
愿本书能为新版OpenCV在国内的普及以及在世界范围内的发展,献上绵薄之力。