欢迎来到机器视觉网! 登录 | 注册

学习OpenCV(中文版)

发布日期:2019-04-11

内容简介

  计算机视觉是在图像处理的基础上发展起来的新兴学科。OpenCV是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。
  本书由OpenCV发起人所写,站在一线开发人员的角度用通俗易懂的语言解释了OpenCV的缘起和计算机视觉基础结构,演示了如何用OpenCV和现有的自由代码为各种各样的机器进行编程,这些都有助于读者迅速入门并渐入佳境,兴趣盎然地深入探索计算机视觉领域。
  本书可作为信息处理、计算机、机器人、人工智能、遥感图像处理、认知神经科学等有关专业的高年级学生或研究生的教学用书,也可供相关领域的研究工作者参考。
  透过本书,您将置身于迅速发展的计算机视觉领域。本书由自由开源OpenCV的发起人所著,介绍了计算机视觉,并通过实例演示了如何快速生成这样的应用——能使计算机“看到”并根据由此获取的数据做出决策。
  计算机视觉无处不在,安全系统、制造检验系统、医学图像分析、无人机等都可以见到它的踪影。它与Google Map和Google Earth紧密结合,它检查LCD屏幕上的像素,它确保衬衫上的每个针脚都能完全缝合。OpenCV提供了一个简易好用的计算机视觉框架和一个丰富的库,后者包含500多个可实时运行视觉代码的函数。
  透过各章提供的练习,任何一个开发人员或爱好者都可以迅速掌握如何使用这个框架。本书特色主题如下:
  透彻介绍OpenCV
  从摄像机获取输入
  图像的变换
  图像的分割和形状的匹配
  模式识别,包括人脸检测
  二维和三维场景中的跟踪监测
  根据立体视觉进行三维重构
  机器学习算法
  “让机器来看”是一个富有挑战但也很有意思的目标。不管是想构建简单的视觉应用,还是复杂的视觉应用,都离不开这本入门必备参考,拿起它,开始愉快的学习之旅吧!

作者简介

  布拉德斯基,Gary Rost Bradski博士是斯坦福大学人工智能实验室计算机科学系的顾问教授,同时也是Willow Garage的资深科学家,Willow Garage是一家机器人研究机构/孵化器。

精彩书评

  ★“OpenCV库对从业人员而言非常有用,对初涉该领域的新手而言也不失为一个优秀工具。正如其广而告之的那样,它是一套高效的计算机视觉算法。”
  ——William T. Freeman,麻省理工学院计算机科学与人工智能实验室


  ★“对计算机视觉领域内任何一个从业人员而言,《学习OpenCV》是他们不可或缺的重要参考。”
  ——David Lowe,英属哥伦比亚大学计算机科学教授

目录

出版前言
译者序
写在前面的话
前言
第1章 概述
什么是OpenCV
OpenCV的应用领域
什么是计算机视觉
OpenCV的起源
下载和安装OpenCV
通过SVN获取最新的OpenCV代码
更多OpenCV文档
OpenCV的结构和内容
移植性
练习
第2章 OpenCV入门
开始准备
初试牛刀—— 显示图像
第二个程序—— 播放AVI视频
视频播放控制
一个简单的变换
一个复杂一点的变换
从摄像机读入数据
写入AVI视频文件
小结
练习
第3章 初探OpenCV
OpenCV的基本数据类型
CvMat矩阵结构
IplImage数据结构
矩阵和图像操作
绘图
数据存储
集成性能基元
小结
练习
第4章 细说HighGUI
一个可移植的图形工具包
创建窗口
载入图像
显示图像
视频的处理
ConvertImage函数
练习
第5章 图像处理
综述
平滑处理
图像形态学
漫水填充算法
尺寸调整
图像金字塔
阈值化
练习
第6章 图像变换
概述
卷积
梯度和Sobel导数
拉普拉斯变换
Canny算子
霍夫变换
重映射
拉伸、收缩、扭曲和旋转
CartToPolar与PolarToCart
LogPolar
离散傅里叶变换(DFT)
离散余弦变换(DCT)
积分图像
距离变换
直方图均衡化
练习
第7章 直方图与匹配
直方图的基本数据结构
访问直方图
直方图的基本操作
一些更复杂的策略
练习
第8章 轮廓
内存
序列
查找轮廓
Freeman链码
轮廓例子
另一个轮廓例子
深入分析轮廓
轮廓的匹配
练习
第9章 图像局部与分割
局部与分割
背景减除
分水岭算法
用Inpainting修补图像
均值漂移分割
Delaunay三角剖分和Voronoi 划分
练习
第10章 跟踪与运动
跟踪基础
寻找角点
亚像素级角点
不变特征
光流
mean-shift和camshift跟踪
运动模板
预估器
condensation算法
练习
第11章 摄像机模型与标定
摄像机模型
标定
矫正
一次完成标定
罗德里格斯变换
练习
第12章 投影与三维视觉
投影
仿射变换和透视变换
POSIT:3D姿态估计
立体成像
来自运动的结构
二维和三维下的直线拟合
练习
第13章 机器学习
什么是机器学习
OpenCV机器学习算法
Mahalanobis距离
K均值
朴素贝叶斯分类
二叉决策树
boosting
随机森林
人脸识别和Haar分类器
其他机器学习算法
练习
第14章 OpenCV的未来
过去与未来
发展方向
OpenCV与艺术家
后记
参考文献
索引
关于作者和译者
封面图片

精彩书摘

  第1章

  概述

  什么是OpenCV

  OpenCV是一个开源的计算机视觉库,OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上。OpenCV还提供了Python、Ruby、MATLAB以及其他语言的接口。

  OpenCV的设计目标是执行速度尽量快,主要关注实时应用。它采用优化的C代码编写,能够充分利用多核处理器的优势。如果是希望在Intel平台上得到更快的处理速度,可以购买Intel的高性能多媒体函数库IPP(Integrated Performance Primitives)。IPP库包含许多从底层优化的函数,这些函数涵盖多个应用领域。如果系统已经安装了IPP库,OpenCV会在运行时自动使用相应的IPP库。

  OpenCV的一个目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的计算机视觉相关应用程序。OpenCV包含的函数有500多个,覆盖了计算机视觉的许多应用领域,如工厂产品检测、医学成像、信息安全、用户界面、摄像机标定、立体视觉和机器人等。因为计算机视觉和机器学习密切相关,所以OpenCV还提供了MLL(Machine Learning Library)机器学习库。该机器学习库侧重于统计方面的模式识别和聚类(clustering)。MLL除了用在视觉相关的任务中,还可以方便地应用于其他的机器学习场合。

  OpenCV的应用领域

  大多数计算机科学家和程序员已经意识到计算机视觉的重要作用。但是很少有人知道计算机视觉的所有应用。例如,大多数人或多或少地知道计算机视觉可用在监控方面,也知道视觉被越来越多地用在网络图像和视频方面。少数人也了解计算机视觉在游戏界面方面的应用。但是很少有人了解大多数航空和街道地图图像(如Google的Street View)也大量使用计算机定标和图像拼接技术。一些人知道安全监控、无人飞行器或生物医学分析等方面的应用,但是很少人知道机器视觉是多么广泛地被用在工厂中:差不多所有的大规模制造的产品都在流水线上的某个环节上自动使用视觉检测。

  OpenCV所有的开放源代码协议允许你使用OpenCV的全部代码或者OpenCV的部分代码生成商业产品。使用了OpenCV后,你不必对公众开放自己的源代码或改善后的算法,虽然我们非常希望你能够开放源代码。许多公司(IBM,Microsoft,Intel,SONY,Siemens和Google等其他公司)和研究单位(例如斯坦福大学、MIT、CMU、剑桥大学和INRIA)中的人都广泛使用OpenCV,其部分原因是OpenCV采用了这个宽松的协议。Yahoo groups里有一个OpenCV论坛,用户可以在此发帖提问和讨论;该论坛大约有20 000个会员。OpenCV在全世界广受欢迎,在中国、日本、俄罗斯、欧洲和以色列都有庞大的用户群。

  自从OpenCV在1999年1月发布alpha版本开始,它就被广泛用在许多应用领域、产品和研究成果中。相关应用包括卫星地图和电子地图的拼接,扫描图像的对齐,医学图像去噪(消噪或滤波),图像中的物体分析,安全和入侵检测系统,自动监视和安全系统,制造业中的产品质量检测系统,摄像机标定,军事应用,无人飞行器,无人汽车和无人水下机器人。将视觉识别技术用在声谱图上,OpenCV可以进行声音和音乐识别。在斯坦福大学的Stanley机器人项目中,OpenCV是其视觉系统的关键部分。Stanley在DARPA机器人沙漠挑战赛中,赢得了二百万美元奖金[Thrun06]。

  什么是计算机视觉

  计算机视觉 是将来自静止图像或视频的数据转换成一个决策或者一种新的表达方式的过程,所有的这些转换都是为了达到某个目标。输入数据可以包含一些辅助信息,如“摄像机架在汽车上”或“激光扫描仪在1米处发现一个物体”。最终的决策可能是“场景中有一个人”或“在这个切片中有14个肿瘤细胞”。一种新的表达方式可以是将一张彩色照片转为灰度照片,或者从图像序列中去除摄像机晃动影响。

  因为人类是视觉动物,所以会误以为可以很容易地实现计算机视觉。当你凝视图像时,从中找到一辆汽车会很困难么?你凭直觉会觉得很容易。人脑将视觉信号划分入很多个通道,将各种不同的信息输入你的大脑。你的大脑有一个关注系统,会根据任务识别出图像的重要部分,并做重点分析,而其他部分则分析得较少。在人类视觉流中存在大量的反馈,但是目前我们对之了解甚少。肌肉控制的传感器以及其他所有传感器的输入信息之间存在广泛的关联,这使得大脑可以依赖从出生以来所学到的信息。大脑中的反馈在信息处理的各个阶段都存在,在传感器硬件(眼睛)中也存在。在眼睛中通过反馈来调节通过瞳孔的进光量,以及调节视网膜表面上的接收单元。

  在计算机视觉系统中,计算机接接收到的是来自摄像机或者磁盘文件的一个数值矩阵。一般来说,没有内置的模式识别系统,没有自动控制的对焦和光圈,没有多年来经验的积累。视觉系统通常很低级。图1-1显示了一辆汽车的图像。在此图中,我们可以看到车的一侧有一个反光镜,而计算机“看”到的只是一个数值的矩阵。矩阵中的每个数值都有很大的噪声成分,所以它仅仅给出很少的信息,这个数值矩阵就是计算机“看”到的全部。我们的任务是将这个具有噪声成分的数值矩阵变成感知:“反光镜”。图1-2形象地解释了为什么计算机视觉如此之难。

  ……

前言/序言

  前言

  本书为使用开放源代码计算机视觉库(OpenCV)提供了一个实战指南,同时还介绍了大量计算机视觉领域的背景知识以帮助读者充分使用OpenCV。

  目的

  计算机视觉是一个迅速发展的领域,摄像机价格不断降低且功能越来越强、计算能力的普及以及视觉算法的日臻成熟都带动了该领域的发展。OpenCV在计算机视觉的发展中扮演着重要的角色,它使得数千名研究人员在视觉领域能够获得更高的生产力。由于OpenCV专注于实时视觉应用,因此十分有助于学生和专业人员高效完成项目和加快研究进展,这是通过它提供的一个计算机视觉和机器学习基础架构来实现的,这个基础架构过去只是少数设备完善的实验室的专利。本书目的如下。

  为OpenCV提供一份更好的文档——详细说明函数调用约定以及如何正确使用这些函数。

  快速帮助读者对计算机视觉的算法原理获得直观的理解。

  让读者认识到可以使用哪些算法,以及应用这些算法的场合。

  通过许多可用的代码实例,让读者循序渐进地学会如何实现计算机视觉和机器学习算法。

  培养读者具有一定的直觉,使其在出现问题的时候能够对一些OpenCV源代码中更高级的子程序进行修正。

  简言之,本书既是我们在学校时希望使用的教材,也是我们在工作时希望翻阅的参考书。

  本书为OpenCV这个工具提供了注解,旨在帮助读者快速在计算机视觉领域中开展有趣的工作。本书能帮助读者直观地理解算法的原理,这样可以帮助读者设计和调试视觉系统,并使得其他教材中对计算机视觉和机器学习算法的形式化描述更易于理解和记忆。

  总而言之,如果直观地领会了算法的原理,便容易理解复杂的算法和与这些算法相关的数学知识。

  本书面向的读者

  本书包括算法描述、可运行的例程代码以及对OpenCV库中的计算机视觉工具的解释,因此,它应该会对多种类型的读者提供有益的帮助。

  专业人员

  对于需要迅速实现计算机视觉系统的专业人员来说,例程代码为开始工作提供了一个快速上手的框架。我们对算法原理的直观描述可以迅速教会读者或提示读者其 用法。

  学生

  如我们所说,本书是我们当年在学校时希望使用的教材。直观的解释、详细的文档和例程代码都有助于读者在计算机视觉领域获得迅速成长,完成更多有趣的课堂项目,并且最终为计算机视觉领域贡献新的研究成果。

  教师

  计算机视觉是一个迅速发展的领域。我们发现,在需要时讲解一些经典的理论、当前的论文或专家的讲稿,学生会迅速地掌握一本课本。同时,学生也可以更早开始一些课程项目,尝试更多有挑战性的任务。

  业余爱好者

  计算机视觉非常有趣,可任由你天马行空地“创造”!

  我们对于为读者提供充分的直观感受、文档以及可运行的代码给予了强烈的关注,目的是使读者能够迅速实现实时计算机视觉应用程序。

  本书声明

  本书并不是一本正规教材。毋庸讳言,本书的许多知识点都涉及了大量数学细 节 ,但这样做的目的是加深读者对算法的理解,或者讲清楚算法中所用的前提条件。在这里,我们并不打算进行严格的数学推导,这也许会让一些一直用严格数学表达的人感到不习惯。

  本书不是为理论研究人员所写,因为它更多地关注应用。本书针对视觉提供通用的知识,而不是仅仅针对计算机视觉的某些特定应用(例如医学图像或遥感分析)。

  也就是说,作者深信一点:读完这里的解释之后,学生不仅会更好地学习理论知识,还会将这些知识铭记于心。因此,本书是针对理论课程的理想辅导书,也适用于入门课程或实战性较强的课程。

  关于本书中的程序

  本书所有的例程都基于OpenCV 1.0版本。代码可以在Linux或Windows下运行,也可能在OS-X下运行。本书的例程源代码可以本书的网站下载。OpenCV可以从它的代码管理网站下载。

  OpenCV仍在不断发展,每年都会发布一到两个正式版本。一般来说,可以从代码管理网站的SVN服务器(获得最新代码。

  预备知识

  在大多数情况下,读者只需要知道如何用C语言编程,也许需要知道一些C++编程知识。许多数学相关的内容属于选读,并带有特定标记。书中涉及的数学知识包括简单的代数和基本的矩阵代数,并且假定读者较熟悉最小二乘优化问题的求解方法,以及高斯分布、贝叶斯定律和简单函数的求导等一些基本知识。

  这些数学知识用于帮助读者加深对算法的直观理解。读者可以跳过数学和算法描述,只通过函数定义和范例代码,便可让计算机视觉应用程序启动和运行。

  如何充分使用本书

  本书不需要按照顺序从头到尾地阅读。它可以作为一种用户手册:在需要的时候,可以从中查找函数;如果想知其所以然,可以阅读函数的描述。然而,本书的设计初衷是更偏向于教程。它帮助读者基本了解计算机视觉,如何以及何时使用所选定的算法。

  本书可以作为计算机视觉领域本科生或研究生的辅导书或主要教材。学生阅读本书可迅速了解计算机视觉,然后再辅以其他教材中的理论知识以及本领域内的学术论文,更深入地学习。每一章后面都有练习题,可以帮助测试学生对知识的掌握情况,并加深理解。

  您可以通过下面三种方式之一阅读本书。

  仅选有用部分

  开始阅读本书时,请先阅读第1章~第3章,然后根据自己需要阅读其他章节。本书不一定要按照顺序阅读,不过第11章和第12章除外。

  最佳进度

  一个星期只读两章,直到用六个星期读完第1章~第12章(第13章有些特殊,详见下文讨论)。然后开始项目,着手解决具体问题,并阅读其他教材和相关的论文。

  快速掌握

  在充分理解内容的前提下尽快浏览本书第1章~第12章。然后开始项目,着手解决具体问题,并阅读其他的教材和相关的论文。该方法可供专业人员选用,同时也适用于比较高级的计算机视觉课程。

  第13章的篇幅较多,介绍了机器学习的背景知识、OpenCV中实现的机器学习算法背后的细节,以及如何使用这些算法。当然,机器学习与物体识别以及计算机视觉的很多方面相关,详细描述需要一本书的篇幅。专业人员会发现,这是未来阅读文献(或直接使用OpenCV库中的代码立项)的一个理想起点。对于一般的计算机视觉课程来说,本章可作为选学内容。

  这是作者所希望的教授计算机视觉的方法:学生掌握要点后,快速学完课程内容,然后动手做一些有意义的课堂项目,同时指导老师通过其他教材或论文提供该领域的一些有深度的知识。该方法对小学期、整个学期或两个学期的课程都适用。学生的兴趣和创造力可以被迅速激发起来,很好地将自己所理解的知识和可运行的代码结合起来。当他们开始更有挑战性且更耗时的项目时,指导老师可帮助他们开发和调试复杂的系统。对于课时较多的课程,项目本身可以以项目管理的方式变成教育方式。首先建立其一个可以运行的系统,并优化改进该系统,然后进行研究。课程的目标是每个项目可以发表一篇会议论文,并且在随后(课程结束之后)的工作中发表更多相关论文。

  本书所用约定

  本书采用如下印刷约定。

  斜体

  表示新名词,URL,电子邮件地址,文件名,文件扩展名,路径名,目录和Unix实用程序。

  等宽字体

  表示命令、选项、开关、变量、属性、键值、函数、类型、类、命名空间、方法、模块、参数、参数、值、对象、事件、事件句柄、XML标签、HTML标签、文件内容或者命令输出。

  等宽粗体

  显示需要用户逐字输入的命令或者其他文字。也用于代码中的强调。

  等宽斜体

  显示应该被用户输入值代替的文字。

  […]

  表示引用参考文献。

  注意: 该图标表示一个技巧,建议或一般注解。

  警告:该图标表示警告或注意事项。

  使用例程代码

  OpenCV是免费的,可用于商业和研究,因此对本书的例程代码,我们也持同样的态度。本书例程代码可以用于课程作业、科研或商业产品。如果在使用OpenCV时能在参考文献中引用本书,我们将很高兴,但这不是必须的。它如何帮助你完成课程作业(最好保密)这方面的细节可以不必告诉我们,但在借助于OpenCV时,我们希望知道您是如何将计算机视觉用于科学研究,课堂教学以及商业产品的。再次强调,这不是必须的,但我们总期待着您能跟我们讲几句。



山东群英会规则 三分快3 极速11选5 上海11选5走势 极速3分彩 三分PK拾平台 快乐赛车开奖 秒速时时彩 幸运赛车 上海时时乐