具体描述
计算机视觉是机器准确识别、理解和表示信息,从而感知并与世界交互的媒介,在人脸识别、智能驾驶、手势游戏、图像搜索、自动定位等各领域都发挥着极为重要的作用。OpenCV作为开源程序库,提供了500多个用于图像和视频分析的优化算法,是相关领域研发人员的主要开发工具。
本书不仅基于OpenCV库介绍了计算机视觉编程,让零基础用户能全面掌握各种开发方法,更可贵的是注重实用性。作者不单纯罗列各种功能,而是逐一讲解了如何使用各种功能完成特定任务。你将在学习概念、原理、示例的过程中了解50多个实例的具体应用,学会快速构建真正满足需要的视觉应用。作为升级版,本书全面修订、升级了所有实例,也增加了对OpenCV功能的介绍,覆盖的知识点更加全面。
本书不仅适合有C++背景的计算机视觉新手学习,也是专业开发人员必备的参考,还可作为相关专业学生的辅助教材。
本书内容:
• OpenCV库安装和程序开发;
• 通过操作像素来处理图像;
• 用直方图分析图像;
• 分割图像为同质区域,并提取有意义的目标;
• 用滤波器增强图像内容;
• 利用图像几何关联同一场景不同视角的图像;
• 利用不同角度的图像校准相机。
作者简介
作者简介:
Robert Laganière
渥太华大学电气工程与计算机科学学院教授,同时任教于学院成立的VIVA实验室(主要研究图像与视频处理、计算机视觉、自治系统),还是基于云的家庭监控服务公司iWatchLife和嵌入式视觉解决方案行业引领者Cognivue公司的首席科学家。他与人共同发表过多篇科学论文,并获得了基于内容的视频分析、视觉监控、目标识别和三维重建等领域的多项专利。
2006年,他在渥太华与人共同创立了从事视频分析的Visual Cortek公司(2009年被iWatchLife收购)。个人网站:www.laganiere.name。
译者简介:
相银初
1996年毕业于复旦大学,长期从事软件开发和项目管理工作,涉及C++、C#、Oracle、Linux等技术,也从事软件类图书的翻译工作。
目录信息
1.1 简介 1
1.2 安装OpenCV库 1
1.2.1 准备工作 1
1.2.2 安装 2
1.2.3 实现原理 3
1.2.4 扩展阅读 4
1.2.5 参阅 6
1.3 装载、显示和存储图像 6
1.3.1 准备工作 6
1.3.2 如何实现 6
1.3.3 实现原理 8
1.3.4 扩展阅读 9
1.3.5 参阅 12
1.4 深入了解cv::Mat 12
1.4.1 如何实现 12
1.4.2 实现原理 14
1.4.3 扩展阅读 16
1.4.4 参阅 17
1.5 定义兴趣区域 18
1.5.1 准备工作 18
1.5.2 如何实现 18
1.5.3 实现原理 19
1.5.4 扩展阅读 19
1.5.5 参阅 20
第2章 操作像素 21
2.1 简介 21
2.2 访问像素值 22
2.2.1 准备工作 22
2.2.2 如何实现 22
2.2.3 实现原理 24
2.2.4 扩展阅读 24
2.2.5 参阅 25
2.3 用指针扫描图像 25
2.3.1 准备工作 25
2.3.2 如何实现 26
2.3.3 实现原理 27
2.3.4 扩展阅读 28
2.3.5 参阅 31
2.4 用迭代器扫描图像 31
2.4.1 准备工作 32
2.4.2 如何实现 32
2.4.3 实现原理 32
2.4.4 扩展阅读 33
2.4.5 参阅 34
2.5 编写高效的图像扫描循环 34
2.5.1 如何实现 34
2.5.2 实现原理 34
2.5.3 扩展阅读 36
2.5.4 参阅 36
2.6 扫描图像并访问相邻像素 36
2.6.1 准备工作 36
2.6.2 如何实现 37
2.6.3 实现原理 38
2.6.4 扩展阅读 39
2.6.5 参阅 39
2.7 实现简单的图像运算 40
2.7.1 准备工作 40
2.7.2 如何实现 40
2.7.3 实现原理 41
2.7.4 扩展阅读 41
2.8 图像重映射 42
2.8.1 如何实现 43
2.8.2 实现原理 43
2.8.3 参阅 44
第3章 用类处理彩色图像 45
3.1 简介 45
3.2 在算法设计中使用策略模式 45
3.2.1 准备工作 46
3.2.2 如何实现 46
3.2.3 实现原理 47
3.2.4 扩展阅读 50
3.2.5 参阅 52
3.3 用控制器设计模式实现功能模块间通信 52
3.3.1 准备工作 53
3.3.2 如何实现 53
3.3.3 实现原理 55
3.3.4 扩展阅读 56
3.4 转换颜色表示法 57
3.4.1 准备工作 57
3.4.2 如何实现 57
3.4.3 实现原理 58
3.4.4 参阅 59
3.5 用色调、饱和度、亮度表示颜色.59
3.5.1 如何实现 60
3.5.2 实现原理 61
3.5.3 扩展阅读 63
第4章 用直方图统计像素 66
4.1 简介 66
4.2 计算图像直方图 66
4.2.1 准备工作 67
4.2.2 如何实现 67
4.2.3 实现原理 71
4.2.4 扩展阅读 71
4.2.5 参阅 73
4.3 利用查找表修改图像外观 73
4.3.1 如何实现 74
4.3.2 实现原理 74
4.3.3 扩展阅读 75
4.3.4 参阅 77
4.4 直方图均衡化 78
4.4.1 如何实现 78
4.4.2 实现原理 79
4.5 反向投影直方图检测特定图像内容 79
4.5.1 如何实现 79
4.5.2 实现原理 81
4.5.3 扩展阅读 81
4.5.4 参阅 84
4.6 均值平移算法查找目标 84
4.6.1 如何实现 85
4.6.2 实现原理 87
4.6.3 参阅 88
4.7 比较直方图搜索相似图像 88
4.7.1 如何实现 88
4.7.2 实现原理 90
4.7.3 参阅 90
4.8 用积分图像统计像素 91
4.8.1 如何实现 91
4.8.2 实现原理 92
4.8.3 扩展阅读 93
4.8.4 参阅 99
第5章 用形态学运算变换图像 100
5.1 简介 100
5.2 形态学滤波器腐蚀和膨胀图像 100
5.2.1 准备工作 101
5.2.2 如何实现 101
5.2.3 实现原理 102
5.2.4 扩展阅读 104
5.2.5 参阅 104
5.3 用形态学滤波器开启和闭合图像 104
5.3.1 如何实现 104
5.3.2 实现原理 105
5.3.3 参阅 106
5.4 用形态学滤波器检测边缘和角点 106
5.4.1 准备工作 106
5.4.2 如何实现 107
5.4.3 实现原理 109
5.4.4 参阅 110
5.5 用分水岭算法实现图像分割 110
5.5.1 如何实现 111
5.5.2 实现原理 114
5.5.3 扩展阅读 115
5.5.4 参阅 116
5.6 用MSER算法提取特征区域 116
5.6.1 如何实现 117
5.6.2 实现原理 118
5.6.3 参阅 121
5.7 用GrabCut算法提取前景物体 121
5.7.1 如何实现 121
5.7.2 实现原理 123
5.7.3 参阅 124
第6章 图像滤波 125
6.1 简介 125
6.2 低通滤波器 126
6.2.1 如何实现 126
6.2.2 实现原理 127
6.2.3 扩展阅读 129
6.2.4 参阅 132
6.3 中值滤波器 133
6.3.1 如何实现 133
6.3.2 实现原理 134
6.4 用定向滤波器检测边缘 134
6.4.1 如何实现 135
6.4.2 实现原理 137
6.4.3 扩展阅读 139
6.4.4 参阅 141
6.5 计算拉普拉斯算子 141
6.5.1 如何实现 141
6.5.2 实现原理 143
6.5.3 扩展阅读 145
6.5.4 参阅 146
第7章 提取直线、轮廓和区域 147
7.1 简介 147
7.2 用Canny算子检测图像轮廓 147
7.2.1 如何实现 147
7.2.2 实现原理 148
7.2.3 参阅 150
7.3 用霍夫变换检测直线 150
7.3.1 准备工作 150
7.3.2 如何实现 150
7.3.3 实现原理 154
7.3.4 扩展阅读 157
7.3.5 参阅 158
7.4 点集的直线拟合 158
7.4.1 如何实现 159
7.4.2 实现原理 161
7.4.3 扩展阅读 161
7.5 提取区域的轮廓 161
7.5.1 如何实现 162
7.5.2 实现原理 163
7.5.3 扩展阅读 164
7.6 计算区域的形状描述子 164
7.6.1 如何实现 165
7.6.2 实现原理 166
7.6.3 扩展阅读 167
第8章 检测兴趣点 169
8.1 简介 169
8.2 检测图像中的角点 169
8.2.1 如何实现 170
8.2.2 实现原理 174
8.2.3 扩展阅读 176
8.2.4 参阅 177
8.3 快速检测特征 178
8.3.1 如何实现 178
8.3.2 实现原理 179
8.3.3 扩展阅读 180
8.3.4 参阅 182
8.4 尺度不变特征的检测 182
8.4.1 如何实现 183
8.4.2 实现原理 184
8.4.3 扩展阅读 185
8.4.4 参阅 186
8.5 多尺度FAST 特征的检测 187
8.5.1 如何实现 187
8.5.2 实现原理 188
8.5.3 扩展阅读 188
8.5.4 参阅 190
第9章 描述和匹配兴趣点 191
9.1 简介 191
9.2 局部模板匹配 191
9.2.1 如何实现 192
9.2.2 实现原理 194
9.2.3 扩展阅读 195
9.2.4 参阅 196
9.3 描述局部强度值模式 196
9.3.1 如何实现 197
9.3.2 实现原理 198
9.3.3 扩展阅读 200
9.3.4 参阅 203
9.4 用二值特征描述关键点 203
9.4.1 如何实现 203
9.4.2 实现原理 204
9.4.3 扩展阅读 205
9.4.4 参阅 206
第10章 估算图像之间的投影关系 207
10.1 简介 207
10.2 相机校准 209
10.2.1 如何实现 209
10.2.2 实现原理 213
10.2.3 扩展阅读 216
10.2.4 参阅 216
10.3 计算图像对的基础矩阵 216
10.3.1 准备工作 217
10.3.2 如何实现 218
10.3.3 实现原理 219
10.3.4 参阅 220
10.4 用RANSAC(随机抽样一致性)算法匹配图像 220
10.4.1 如何实现 221
10.4.2 实现原理 224
10.4.3 扩展阅读 225
10.5 计算两幅图像之间的单应矩阵.226
10.5.1 准备工作 226
10.5.2 如何实现 227
10.5.3 实现原理 229
10.5.4 扩展阅读 230
10.5.5 参阅 232
第11章 处理视频序列 233
11.1 简介 233
11.2 读取视频序列 233
11.2.1 如何实现 233
11.2.2 实现原理 235
11.2.3 扩展阅读 236
11.2.4 参阅 236
11.3 处理视频帧 236
11.3.1 如何实现 236
11.3.2 实现原理 237
11.3.3 扩展阅读 241
11.3.4 参阅 244
11.4 写入视频帧 244
11.4.1 如何实现 244
11.4.2 实现原理 245
11.4.3 扩展阅读 247
11.4.4 参阅 249
11.5 跟踪视频中的特征点 249
11.5.1 如何实现 249
11.5.2 实现原理 253
11.5.3 参阅 254
11.6 提取视频中的前景物体 254
11.6.1 如何实现 255
11.6.2 实现原理 257
11.6.3 扩展阅读 257
11.6.4 参阅 259
· · · · · · (收起)
读后感
外观看上去挺高端大气的,还是科学出版社出版,翻开目录看看内容也都是自己熟悉的,感觉很亲切!但是!看完之后真他妈的失望,什么玩意嘛?关键的点都没交代清楚,说明的文字又少,好像想说的内容还挺多,经常引出一个疑问就没下文了,卧槽!什么意思?根本看不懂!翻译的他妈...
目前市面上唯一一本介绍OpenCV2.2+的书,So Good。 可能是我有图像处理基础和了解一些计算机视觉内容,花了四五天看完了,代码跑了一遍,代码有些错误都是小错误,很容易找到错误的问题和修改掉。OpenCV2.4.x可能会在8-9节的代码中出现cv::中没有该函数的问题,百度一下就可以...
用实例学习OpenCV的难得的好书,比单纯枯燥的理论讲解更能深入人心和促进学习。而且OpenCV2已经问世一段时间,之前的基本教程都略显陈旧,本书的出现正能够解开发者的燃眉之急。感谢为这本书付出过辛勤劳动的人们
外观看上去挺高端大气的,还是科学出版社出版,翻开目录看看内容也都是自己熟悉的,感觉很亲切!但是!看完之后真他妈的失望,什么玩意嘛?关键的点都没交代清楚,说明的文字又少,好像想说的内容还挺多,经常引出一个疑问就没下文了,卧槽!什么意思?根本看不懂!翻译的他妈...
目前市面上唯一一本介绍OpenCV2.2+的书,So Good。 可能是我有图像处理基础和了解一些计算机视觉内容,花了四五天看完了,代码跑了一遍,代码有些错误都是小错误,很容易找到错误的问题和修改掉。OpenCV2.4.x可能会在8-9节的代码中出现cv::中没有该函数的问题,百度一下就可以...
用户评价
当我拿到这本书时,我的第一感觉是:内容编排得实在太清晰了,逻辑链条异常顺畅。我之前尝试过几本号称是“入门”的视觉书籍,结果往往是前几章还算友好,但一进入到涉及矩阵变换、相机标定这类核心数学内容时,就变得晦涩难懂,让人望而却步。然而,这本“攻略”的作者显然是深谙教学之道的,他们采用了“知识点分层递进”的策略。比如,在讲解图像滤波和形态学操作时,作者首先用直观的图示解释了卷积核的作用,然后才引入详细的公式,这种自上而下的讲解方式极大地降低了初学者的理解门槛。更值得称赞的是,本书对不同编程环境的适应性考虑得非常周到。虽然是编程攻略,但它没有将读者锁定在单一的语言框架内,而是巧妙地平衡了性能导向的C++实现和快速原型开发的Python脚本。每一个关键算法的实现,作者都提供了多语言的参考,这使得不同背景的开发者都能找到最适合自己的学习路径。这本书绝不是那种堆砌概念、只罗列API的工具书,它更像是一本深入理解底层机制的“内功心法”教材,读完之后,我对整个视觉处理流程的把握清晰了很多,很多之前模糊的概念点都豁然开朗。
说实话,在这个技术日新月异的时代,一本技术书籍的生命周期往往很短,尤其涉及前沿的计算机视觉领域。我曾担心这本书的内容是否已经过时,毕竟很多新的深度学习框架层出不穷。然而,这本书的价值恰恰体现在它对“核心理论”的坚守和对“基础范式”的完美梳理上。尽管它可能没有深入到最新的Transformer架构的每一个细节,但它对传统、经典且仍在广泛应用的视觉算法——如光流法、特征匹配、几何变换——的讲解,达到了教科书级别的精度。很多最新的研究和应用,其底层逻辑依然脱胎于这些经典理论。我发现,当我把这本书中的传统视觉部分吃透后,再去学习那些基于深度学习的SOTA(State-of-the-Art)模型时,理解速度和深度都提升了好几个档次。这本书没有盲目追逐热点,而是专注于构建一个稳固的知识地基。对于任何想在这个领域有所建树的人来说,地基的扎实程度决定了未来能盖多高的楼。这本书无疑提供了最坚固的那一块基石。
从项目迭代的角度来看,这本书的组织结构非常适合企业级开发人员的需求。很多企业项目需要快速搭建原型、验证效果,然后逐步优化性能。这本书的章节划分,正好对应了这样一个开发流程:入门部分快速搭建环境,中间部分讲解核心模块的实现(如图像采集、预处理),再往后是高级应用的整合(如跟踪、识别)。最关键的是,它在介绍完一个算法的通用实现后,往往会提供一个“性能优化”或“局限性分析”的小节。这对于我们这些关注实际部署和资源消耗的工程师来说至关重要。例如,它不仅教你如何计算视差图,还会讨论在不同硬件平台上,哪种算法(例如,基于块匹配还是基于深度学习)更适合实时处理。这种从理论到代码,再到工程实践的完整闭环叙事方式,让我能够更自信地将书中学到的知识应用到实际的产品研发周期中,确保我们选择的视觉方案既先进又可靠,而不是纸上谈兵的完美模型。
我是一个重度实践派的读者,书籍的纸质质量和排版布局对我阅读体验的影响非常大。这本“攻略”在物理形态上就体现了高水准。装帧结实耐用,内页纸张的质感很好,即使用高亮笔反复标记,也不会透墨或损坏页面。排版方面,代码块的缩进和高亮区分得非常清晰,尤其是在处理复杂的数学公式和长段的代码示例时,作者采用了适宜的行距和字体大小,使得长时间阅读下来眼睛不容易疲劳。更让我感到贴心的是,书中许多关键公式旁边,作者会附带一个简短的“代码映射”提示,直接告诉我这个公式在后续代码的哪一行或哪个函数中得到了实现。这种紧密的图文和代码互动,极大地减少了读者在理论和实践之间来回翻阅查找的成本。很多技术书籍的排版让人感觉是在应付任务,而这本书,我能感受到编者对知识传递的诚意和对读者体验的尊重,这种细节上的打磨,让它从一堆技术教材中脱颖而出,成为我愿意经常翻阅的参考书。
这本书实在是太棒了,我最近正在攻读计算机视觉方向的研究生课程,市面上同类书籍五花八门,但真正能做到理论与实践紧密结合、深入浅出讲解复杂算法的精品却屈指可数。这本书恰好填补了我的需求。它不仅仅是一本操作手册,更像是一位经验丰富的导师,手把手地引导你从最基础的图像处理概念开始,逐步深入到复杂的深度学习模型在视觉领域的应用。我尤其欣赏作者在讲解每一个核心算法(比如SIFT、SURF特征点提取,或者更现代的卷积神经网络结构)时,会先给出清晰的数学原理推导,确保读者对“为什么”有透彻的理解,而不是仅仅停留在“怎么做”的层面。随后,会立刻跟进详尽的C++代码实现和Python示例,这点对于我这种需要快速将理论转化为项目代码的研究人员来说,简直是福音。书中的案例设计非常贴合实际工程问题,例如实时物体跟踪、三维重建的初步概念等,让原本枯燥的编程练习变得充满挑战性和成就感。我感觉自己不再是单纯地敲代码,而是真正开始“理解”图像是如何被机器“看懂”的。对于那些希望在计算机视觉领域打下坚实基础,并准备进行实际项目开发的读者,这本书绝对是案头必备的宝典,它的内容深度和广度都远远超出了我对一本“编程攻略”的预期。
不知所云。手动微笑
c++ opencv2.4的编程书籍,但用的都是opencv3了,打算看看第三版,不过还是得结合官方文档来看。
不知所云。手动微笑
非常不错。适合有一定的图像处理基础知识、想要上手使用OpenCV的同学。书中代码的讲解和注释都非常到位,对某些基础理论的描述也很精准简洁。准备看一下第三版。
很不错,图像处理种种都涵盖了。线检测,轮廓检测,标定都很实用。