1.OpenCV的发展历程和影响
OpenCV名字包含Open和 Computer Vision 两个词的意思。Open 实际上指的是 Open Source(开源:开发源代码)。Computer Vision 则指计算机视觉。
l 开发源代码 (Open Source Code)
开放源代码是信息技术界从20世纪80年代兴起的新名词。源代码是软件命令电脑执行动作的程序语句,也是一个软件的核心所在。最著名的开放源代码软件,当属芬兰人林努斯·托尔瓦兹提出的“LINUX”。开放源代码软件之所以能够风靡世界,首先是其开源的免费特性,此外由于有全球众多编程者的参与,开源软件一般具有简约精炼,资源占用少,功能集中,安全性好的特点。
从长远来讲,开放源代码或许是一种效率更高、效果更好的软件商业模式。这也是为什么很多商业软件巨头,开始逐步关注开源模式,并参与其中。因为开源,不只是软件比较便宜,这更是一种转变,一种建造当代软件公司发展模式的运动。
l 计算机视觉 (Computer Vision)
计算机视觉是在图像处理的基础上发展起来的新兴学科,它从信息处理的层次研究视觉信息的认知过程,研究视觉信息处理的计算理论、表达与计算方法,包括图像特征提取,摄像机定标,立体视觉,运动视觉(或称序列图像分析),由图像灰度恢复三维物体形状的方法,物体建模与识别方法以及距离图像分析方法等方面。作为一门综合性的交叉学科,计算机视觉处理的领域涉及到计算机科学和工程、信号处理、物理学、应用数学和统计学,神经生理学和认知科学等方面,并在制造业、检验、文档分析、医疗诊断,和军事等领域等各种智能/自主系统中有广泛应用。
l Intel 资助的开源项目:OpenCV
很奇怪是不是,Intel 竟然会资助一个开源项目,这似乎不符合一个跨国公司追求商业利益最大化的做事风格。但是 OpenCV 确实是在Intel 的鼎力资助下,才得到长足和有保障的发展。这是因为开源作为今后软件的发展模式,必将给现有的高技术企业带来巨大的潜在利益。目前以Linux为代表的开放源代码软件得到了HP、IBM、Sun、Intel、Novell等几乎所有的世界各大计算机软、硬件厂商的重视和支持,他们纷纷启动了开发和使用开放源代码软件的项目。因为开源已经日益成为一个不可阻挡的世界潮流,无论从软件开发本身还是技术趋势来看,开放的、有众多志愿者参与的开源项目,都会大大促进产品和技术的发展,并带来巨大的潜在商业价值。
OpenCV作为开放的数字图像处理和计算机视觉软件平台,有以下特点:
(1) 开放C源码
(2) 基于Intel处理器指令集开发的优化代码:
(3) 统一的结构和功能定义
(4) 强大的图像和矩阵运算能力
(5) 方便灵活的用户接口
(6) 同时支持MS-WINDOWS、LINUX平台
作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OPENCV可以直接应用于很多领域,作为第二次开发的理想工具。
2.本书的由来
从开始接触OpenCV到现在,已经有很长的时间了。记得当时在中科院读博士的时候,主要使用MATLAB来做算法原型的设计和验证。为开发演示系统,也为兴趣起见,一直想寻找一种好的、具有类似MATLAB这样功能的图像处理/计算机视觉/模式识别等领域的C/C++基础开发平台。从有名的卡耐基-梅隆大学(CMU)的计算机视觉主页(http://www.cs.cmu.edu/~cil/vision.html)以及开源网站sourceforg.net,到网络上曾经寻找过数不胜数的各种源代码开发包。当时试图把每一个可以下载的源代码source code都运行一遍,可谓是“上穷碧落下黄泉,两处茫茫皆不见”,一直没有找到合适和满意的,究其原因不外乎几个原因,大量的开发包都是业余的爱好者自己编写的,凭兴趣或者自己开发的项目,然后最大的缺点是不规范,缺乏后续的开发和改进能力。直到找到OpenCV,才有眼睛一亮的感觉。
第一次下载OpenCV的版本是BETA2.1版,那时感觉OpenCV能够吸引我的是,除了它必要的功能外,最主要的是它的那个Yahoo Group,在上面可以有很多的参与者,而与众人在一起讨论学习,有一种不断提高自己,增长知识的感觉。后来逐步接触了各个升级版本,也陆续在上面做了不少开发。大约从在几年前开始翻译OpenCV用户手册,建立自己的第一个OpenCV方面的博客开始,就有一种想法,希望能够在中国推广OpenCV。为什么很多好的开源项目,都是在国外的土壤发展壮大,而国内的非常少?几年的经历下来,大致是国内的生存和竞争压力太大的原因,自己何尝不也是如此,这两年几乎总是为生计奔波,而没有时间来做自己喜欢而感兴趣的事情。
最近的一段时间,重新下定决心来写点东西,希望能够对OpenCV在国内的推广有所裨益,一些内容也会陆续放置到博客上(http://blog.youkuaiyun.com/hunnish),对于很多喜欢在网上看书的人,可以直接从博客下载相关内容。
2.本书的宗旨
l 全面反映OpenCV最新版本的通用功能,淡化某些理论性强的专用功能;
l 着力描绘各个函数的使用方法,简化函数用法的解释;
l 多给例子,以有利于不熟悉C/C++语言和计算机视觉、数字图像处理的读者,寓教于例,由浅入深;能够体会到OpenCV带来的成功快乐;
l 诚实面对读者,所有的例子都经过编译运行;
l 为方便读者学习、使用,随书光盘包含了全书的所有源代码以及VC6.0的工程文件,读者可以直接编译运行。
本书的目的是作为一个OpenCV的入门之作,希望抛砖引玉,能够为那些对OpenCV感兴趣以及刚刚开始接触OpenCV的人使用的,希望能够消除在接触一个新事物时所固有的陌生感。
本书没有深入讲解OpenCV中的很多算法所涉及的理论知识,因为这些理论知识已经大大超出本书所能承受的范围,如果需要了解这些理论,最好的方法是看相关的论文以及教科书,而只是说明如何使用这些函数,因此本书力求能够让读者对OpenCV中的模式识别和图像处理等方面的函数,知其然,而不必知其所以然。
3.全书的结构
全书由“前言”、“目录”、“概述”、“正文”、“附录”、和“随书光盘”组成。其中正文包括第二、三、四、五、六章,附录包括第七、八、九章。
第六章以及第二章的部分内容由于仕琪完成,其余部分由刘瑞祯完成。
正文的五章内容是遵循“由浅入深”、“相对独立”和“算例引导”原则安排的。从全书看,概念相对简单的篇章安排在前;复杂的函数和概念,尽量用例子来说明。为了节约篇幅,绝大部分例子都是采用命令行程序的形式提供的,这样有助于读者能够避免图形界面程序的干扰,而直接了解OpenCV中的内核。
附录的三章包括样例索引、函数索引以及附图索引,以方便读者查阅相关内容。
l “第二章OpenCV入门”专门介绍OpenCV最基本的使用方法,主要是针对以前没有接触过OpenCV的读者。因此对程序的安装、配置、编译、运行、基本项目的创建以及基本函数库的构建给出了尽可能详细的解释。
l “第三章OpenCV基础”系统阐明了OpenCV的数据结构、函数使用方法、GUI、矩阵和图像的操作与显示,并且也详细讲解了视频流在OpenCV中的操作方法。配合大量的例子,读者可以通过本章对OpenCV有一个全面而基本的认识。读者千万不要小瞧这一章,因为本章可以说是一个快速而全面的OpenCV介绍,构成了今后开发以及学习OpenCV的坚实基础。
l “第四章数据结构与数据操作”对OpenCV中涉及到的各类数据结构以及相应的操作方法做更进一步的说明。本章的内容建立在OpenCV原来的参考手册,所有的函数参数以及调用方式,都是根据OpenCV V1.0版本来编写的,以后升级版本出来后,有些函数的调用方式也许会发生相应改变,敬请读者注意。
l “第五章模式识别与图像处理”实际上是对OpenCV中涉及到模式识别与数字图像处理方面的函数做一个综合阐述,它的主要部分也是建立在OpenCV 的用户参考手册。本章涉及的很多函数需要大量的理论和专业背景知识做基础,因此本章对这些函数只是阐述了使用方法,并用适当的例子来说明其使用方法,而没有去详细讨论其算法的基本知识,因为这些知识已经大大超出了本书的范围。
l “第六章运动物体跟踪”是一个实际的项目,说明如何利用OpenCV来实现运动物体的智能监控与跟踪。读者可以通过本章对OpenCV有一个实际的开发体验。
4.本书的读者对象和使用建议
本书可作为信息处理、计算机、机器人、人工智能、遥感图像处理、认知神经科学等有关专业的高年级学生或研究生的教学用书,也可供以上领域的产品开发人员和研究工作者参考。
本书内容的自封闭性、算例和完善的检索系统和随书光盘,使本书既能用做教材或自学用书,又能当作实践OpenCV的开发环境。计算机视觉自身很强的综合性决定了本书有较大的知识跨度。其中最主要的两点是:第一,读者应该有良好的C/C++编程基础,因为作为研究人员以及软硬件工程师,编程是必不可少的基本功。第二,书中涉及到的相关模式识别和数字图像处理的相关内容,希望读者尽量结合相关的教科书和参考书,从“知其然“开始,逐步过渡到“知其所以然”。作者在编写本书时,充分考虑了OpenCV的这种特点,也考虑了多方面读者的不同层次需要,因此配置了大量的样例程序,使得不管读者原来的知识背景如何,他们只要循着样例进行操作,就至少能直观地感受到例子的运作结果。
5.致谢
这本书某种程度上属于一时冲动的产物,虽然从有想法到最终开始动手之间的时间很长,然而成书的时间却只有不到一个月。这当然要感谢很多曾经对本书内容做出贡献的人,包括樊臻涛、张红梅、魏育成、张兆翔、张艳秋、谭俊河、柳明等人的工作。本书的很多内容是在他们工作的基础上才得以完成。
另外也要感谢北京航空航天出版社。感谢该社为本书前版所做的一切,也感谢赵延永老师对作者编写本书所给予的鼓励以及对作者的理解和支持。
本书结稿的此时此刻,最后要感谢的是我的妻子李秀娟。她对我的事业和生活给予一如既往的支持。在回国的几年,是她给予我生活和工作的信心。同时也衷心感谢我的父母和家人,当我因事业而到处奔波的时候,给我营照一个温馨而平静的家庭港湾,能让我义无反顾地去追求自己的梦想。时值2006年的圣诞之夜,也算是我的圣诞礼物吧。
刘瑞祯
2006年12月24日夜于北京