计算机视觉是在图像处理的基础上发展起来的新兴学科。OpenCV是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。
本书由OpenCV发起人所写,站在一线开发人员的角度用通俗易懂的语言解释了OpenCV的缘起和计算机视觉基础结构,演示了如何用OpenCV和现有的自由代码为各种各样的机器进行编程,这些都有助于读者迅速入门并渐入佳境,兴趣盎然地深入探索计算机视觉领域。
本书可作为信息处理、计算机、机器人、人工智能、遥感图像处理、认知神经科学等有关专业的高年级学生或研究生的教学用书,也可供相关领域的研究工作者参考。
透过本书,您将置身于迅速发展的计算机视觉领域。本书由自由开源OpenCV的发起人所著,介绍了计算机视觉,并通过实例演示了如何快速生成这样的应用——能使计算机“看到”并根据由此获取的数据做出决策。
计算机视觉无处不在,安全系统、制造检验系统、医学图像分析、无人机等都可以见到它的踪影。它与Google Map和Google Earth紧密结合,它检查LCD屏幕上的像素,它确保衬衫上的每个针脚都能完全缝合。OpenCV提供了一个简易好用的计算机视觉框架和一个丰富的库,后者包含500多个可实时运行视觉代码的函数。
透过各章提供的练习,任何一个开发人员或爱好者都可以迅速掌握如何使用这个框架。本书特色主题如下:
透彻介绍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形象地解释了为什么计算机视觉如此之难。
……
出版前言
译者序
写在前面的话
前言
第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与艺术家
后记
参考文献
索引
关于作者和译者
封面图片
★“OpenCV库对从业人员而言非常有用,对初涉该领域的新手而言也不失为一个优秀工具。正如其广而告之的那样,它是一套高效的计算机视觉算法。”
——William T. Freeman,麻省理工学院计算机科学与人工智能实验室
★“对计算机视觉领域内任何一个从业人员而言,《学习OpenCV》是他们不可或缺的重要参考。”
——David Lowe,英属哥伦比亚大学计算机科学教授