经过近一年的沉淀和总结,《OpenCV3编程入门》一书终于和大家见面了。
最近有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的目录,方便大家更好的了解这本书的内容。其实最近浅墨实在是有些忙,个人独立开发的3D ARPG跨平台游戏App刚刚登陆安卓平台,各大应用商店都需要上架,加之各种学业方面的事情,所以这篇文章直到现在才发出来。
OK,先看看《OpenCV编程入门》这本书的封面。
和出版的第一本书《逐梦旅程》一样,这本书的封面依旧是浅墨自己设计的原型和基调。贴一张有图像处理特色的封面图吧:
好了,言归正传。我们来看看这本书的内容。
一、前言
计算机视觉是一个近几年日臻成熟的领域。随着运算性能强劲而又实惠的计算设备的不断问世,创建复杂的图像应用从未像今天这般容易。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 第三步:工程包含(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 彩色目标跟踪: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”头文件认知 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 综合示例:初级图像混合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编程入门》配套示例代码
从百度云下载《OpenCV3编程入门》配套示例代码
PS:建议下载Github版,因为包括程序序号6、34、84在内的不少代码都在Gihub上有过修订,而百度云这边是原始版本。
七、关于勘误
由于浅墨的水平有限,这本书即便经过了多次的校对,也难免会有疏漏之处。希望书本前的你,能够热心地指出书本中错误,评论在这篇博客的下方。大家的评论中提出的书本中的疏漏,浅墨都会仔细地核对和修正。以便在这本书下一版印刷的时候,能以一个更完美更严谨的样子,呈现在大家的面前。
1)勘误事记
2015年3月,本书进行了第一次勘误。
2015年6月,本书进行了第二次勘误,第二次重印。
2015年9月进行了第三次勘误,第N次重印。
2015年11月4日完成了本书的第四次勘误工作,第N次重印。
2)主要勘误评论回复事记
“ 感谢大家的热心与支持。32楼及以下大家提出的问题,都已在本书第三次修订&印刷(第二次勘误)中全部修正。——于2015年6月。”
“至此,100楼及以下大家提出的勘误问题,以及大家在发给浅墨的邮件中提出的勘误问题,已经全部在这四次勘误的过程中修正。2015年11月及以后版本的《OpenCV3编程入门》一书,已经较为完善。谢谢大家的支持。——于2015年11月4日。”
3)勘误文档下载
《OpenCV3编程入门》2015.3 第一次勘误文档下载
《OpenCV3编程入门》2015.6 第二次勘误文档下载
《OpenCV3编程入门》2015.9 第三次勘误文档下载
《OpenCV3编程入门》2015.11 第四次勘误文档下载
最后,愿大家在本书的帮助下,都能很好地入门和掌握新版OpenCV。
愿本书能为新版OpenCV在国内的普及以及在世界范围内的发展,献上绵薄之力。
以上。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow