(1)什么是OpenCV
OpenCV的全称是Open Source Computer Vision Library,是由Intel公司资助的开源计算机视觉库。它由一系列C函数和少量的C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。独立于操作系统、硬件和图形管理器,OpenCV拥有包括300多个C/C++函数的跨平台的中、高层API编程接口,使用通用的图像、视频载入、保存和获取模块。它不依赖于其他的外部库,同时也可以使用某些外部库。
OpenCV对非商业应用和商业应用都是免费的,其实例如图1-11所示。另外,OpenCV也为Intel公司的Integrated Performance Primitives(IPP)提供了透明接口。这意味着,如果有为特定处理器(当然是Intel的处理器了)优化的IPP库,OpenCV将在运行时自动加载这些库。
图1-11 运用OpenCV进行图像处理的实例图
OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,只要处理得当,不需要添加新的外部支持也可以完整地编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常地运行在DSP系统和单片机系统中,目前这种移植在大学中经常作为相关专业本科生毕业设计或者研究生的研究课题。
用OpenCV处理数字图像具有如下的特点。
➢开源图像处理算法库。
➢跨平台的中高层API(Windows/Linux)。
➢免费共享(商业/非商业)。
➢速度快,使用方便。
➢可扩展性好,包括底层和高层的开发包。
(2)为什么会有OpenCV
计算机视觉市场巨大而且持续增长,且这方面没有标准API,在OpenCV出现之前的计算机视觉软件有下面几点不足。
➢代码执行慢、不稳定,独立并与其他库不兼容。
➢商业化工具(比如Halcon,MATLAB+Simulink)耗费很高。
因此,迫切需要一个标准的API来简化计算机视觉程序和解决方案的开发。OpenCV就是顺应这样的要求而出现的标准API函数库。
(3)OpenCV的组成
OpenCV主要由Cv、HighGUI、CxCore、CvAux、CvCam和ml这几部分组成,如图1-12所示。
图1-12 OpenCV的组成
➢Cv:包含一些基本结构和算法函数,如数据结构与线性代数支持,主要提供各种数据类型的基本运算功能。
➢HighGUI:用户交互部分(GUI、图像视频I/O,系统调用函数等)。
➢CxCore:图像处理和计算机视觉功能,是主要的OpenCV函数,包括图像处理、结构分析、运动分析、物体跟踪、模式识别以及摄像机标定等功能。(www.xing528.com)
➢CvAux:OpenCV附加库函数,包含一些实验性的函数,如视角校正、三维跟踪、PCA、HMM等函数。
➢CvCam:在Linux版本中已经抛弃,而且在Windows中将DirectX支持引入HighGUI后,CvCam将被彻底抛弃。
(4)OpenCV的功能。
作为一个独立的图像处理库,OpenCV可以实现以下功能。
➢图像数据的操作:分配、释放、复制、设置和转换。
➢图像/视频的输入输出(I/O):文件与摄像头的输入、图像和视频文件输出。
➢矩阵和向量的操作以及线性代数的算法程序:矩阵积、解方程、特征值以及奇异值等。
➢各种动态数据结构:列表、队列、集合、树和图等。
➢基本的数字图像处理:滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图和图像金字塔等。
➢结构分析:连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合和Delaunay三角划分等。
➢摄像头定标:发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计和立体对应。
➢运动分析:光流、运动分割和跟踪。
➢目标识别:特征法、隐马尔可夫模型。
➢基本的GUI:图像与视频显示、键盘与鼠标事件处理和滚动条。
➢图像标注:线、二次曲线、多边形和画文字。
(5)OpenCV的应用领域
因具有开源、独立、免费等特性,OpenCV的应用可以跨越不同的硬件平台和软件平台,因此所有使用机器视觉的地方都可以使用OpenCV来对图像进行处理。其主要应用领域包括人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪和机器人等。
(6)OpenCV与MATLAB图像处理工具箱的比较
OpenCV和MATLAB图像处理工具箱两者都有自己的特点,在不同应用中有着重要地位,如表1-1所示。MATLAB图像处理工具箱编程直观方便,适合进行算法的测试和仿真,可以快速得到理论推导的结果,但也正因为如此,许多处理算法未经很好的优化,处理速度比不上OpenCV。此外,MATLAB图像处理工具箱中部分代码不开源,应用平台较为局限,不是非常适用于商业软件的开发;OpenCV作为专门的图像处理库,算法经过很好的优化,效率高,开源免费,而且可以跨平台使用,适用于各种实时图像处理系统的开发,但对于不熟悉C/C++编程语言的用户来说,OpenCV与MATLAB相比,编程并不十分直观,编程调试需要花费较多时间。
表1-1O penCV与MATLAB图像处理工具箱的比较
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。