摘要:OpenCV是近年来推出的开源、免费的计算机视觉库,利用其所包含的函数可以很方便地实现数字图像
和视频处理。同时利用面向对象的VC++ 6.0编程工具,用C++语言进行程序编写,大大提高了计算机的运行
速度。本文首先阐述了OpenCV的特点以及结构,然后以平滑处理、图像形态学为例介绍了OpenCV在数字图
像处理中的典型应用。OpenCV算法库为VC++编程处理数字图像提供了很大的方便,其必将成为图像视频处
理领域的强有力的工具。
关键词:OpenCV;平滑处理;图像形态学
0 引言
人类离不开图像,画面比文字更形象生动,人类70%
以上的信息来自视觉。近年来,数字图像处理发展迅速,
实用价值高,应用范围极为广泛,现已应用于军事技术、
政府部门和医疗卫生等多种领域。数字图像处理研究内容
很广泛,归纳起来有如下几个方面: 图像数字化、图像压缩、
图像增强、图像分析、图像恢复。
随着数字图像处理的日益广泛,众多应用于计算机视
觉和图像处理的软件包相继被开发出来。从文献[3] 可知,
大多数软件包基于计算速度的角度考虑,采用 C/C++编写
的。虽然这些软件包对计算机图像处理和计算机视觉的研
究提供很大的便利,但也存在着不足之处:①大多数软件
包没有高级数学计算函数;② MATLAB虽提供了较为丰富
的数学函数,但其运行速度令人担忧;③大部分软件包不
支持网络服务器结构的应用程序的开发;④绝大多数软件
包不支持可嵌入性。
OpenCV图像处理算法库在VC++编译环境下运行,
为数字图像的处理、计算机视觉技术应用提供了极大的方
便。它不仅是完全免费的开源软件而且它包含非常丰富的
各类图像处理及识别的函数。本文主要介绍基于OpenCV
的图像处理的特点以及实例。
1 OpenCV
OpenCV(open source computer vision library)诞生于
Intel 研究中心,是一个开放源码的计算机视觉库。OpenCV
采用C/C++ 语言编写,可以运行在Linux/Windows/Mac等
操作系统上。OpenCV 还提供了Python、Ruby、MATLAB
以及其他语言的接口 。它包含的函数有500多个,覆盖
了计算机视觉的许多应用领域,OpenCV主体分为5个模块,
其中4个模块如图1所示。
CV
图像处理和视觉
算法
MLL
统计分类器
H ighGUI
GUI 、图像和视
频输入、输出
CXCORE
基本结构和算法、XML支持、绘图函数
图1 OpenCV的基本结构
图1中并没有包含CvAux模块,该模块中一般存放一
些即将被淘汰的算法和函数,同时还有一些新出现的实验
性的算法和函数。
依据文献[5-7] 总结归纳了一下OpenCV的优点,主
要体现在如下几个方面:
① 跨平台,可移植性好。OpenCV是由跨平台的
中、高层API构成,很好的支持 Windows、Linux、Unix及
MacOSX等操作系统,可以在大多数的 C/C++ 编译器下工
作;
② 独立性好。OpenCV包含500多个函数,不依赖外
部库,既可以独立运行,也可以在运行时使用其他外部库;
③ 源代码公开。开发者可以对源代码进行修改,将自
己设计的新类添加到库中,只要设计符合规范,自己的代
码也可以被别人广泛使用;
④ 具备强大的图像和矩阵运算能力。具有丰富的函数
处理函数,减少开发者的工作量,有效提高开发效率和程
序运行的可靠性;
⑤ 运行速度快,OpenCV使用优化了的C和C++代码
实现,大大提升了计算机的运行速度。
总之,有了OpenCV视觉库,科研开发人员只需添
加自己的编写程序,直接调用OpenCV中的函数即可实现,
这样不仅降低了开发程序的难度,而且缩短了相关程序的
开发周期。
2 OpenCV图像处理编程实例
OpenCV处理图像包括以下几个步骤:加载图像;显
示图像;处理图像。
2.1 加载图像
不同类型的图像内部结构不同,需要根据图像的结构
采用不同的方法将图像文件中的数据读入内存。OpenCV
的HighGUI库中提供了cvLoadImage()函数,可以将图像
数据从文件中加载进来,而且不管加载前图像是什么格式,
加载后它返回的都是一个指向IplImage 结构体的指针,方
便了后续的处理。
cvLoadImage() 函数原型为:IplImage
*cvLoadImage(const char *filename, int iscolor),其中iscolor是
辅助参数,可选正数,负数和零3种取值。
2.2 显示图像
在窗口中显示出加载的图像,主要由两个函数完成
的,cvNamedWindow() 和 cvShowImage().cvNamedWindow()
也是一个高层调用接口,由HighGUI库提供 ,它用于在
屏幕上创建一个窗口,将被显示的图像包含于该窗口中。
cvShowImage()用于在上述创建的窗口中显示已加载的图像。
在这里还要提一下3个比较重要的函数。cvWaitKey()函
数使程序暂停,能使用户很好观察到图像;cvReleaseImage()
和cvDestroyWindow()用于释放所占用的内存。
2.3 处理图像
主要运用 OpenCV中的函数去实现图像处理过程中的
一些基本算法,包括彩色转换为灰度、形态学操作、阈值
2值化和边缘提取等。
以平滑处理中的高斯平滑为例,其中用到的主要函数
是cvSmooth()。其函数原型为:void cvSmooth(const CvArr
*src,CvArr *dst,int smoothtype=CV_GAUSSIAN,int para1=3,int
param2=0,int param3=0,int param4=0);根据参数smoothtype
的不同可实现不同方式的滤波,常用的有CV_GAUSSIAN-
对图像进行核大小为param1*param2的高斯卷积,;CV_
MEDIAN-对图像进行 param1*param1的中值滤波。
以处理膨胀、腐蚀和开闭运算为例,它们能
实现消除噪声、分割出独立的图像元素以及在图像
中连接相邻的元素。其主要包括以下几个函数:1)
cvCreateStructuringElementEx() 创建结构元素;2)
cvReleaseStructuringElement() 删除结构元素;3)cvErode()
腐蚀;4)cvDilate()膨胀; 5)cvMorphologyEx() 高级形态学
变换,在腐蚀和膨胀的基本操作基础上,完成一些高级的
形态变换[8],其中包括:开运算、闭运算、形态学梯度
礼帽和黑帽。
3 结束语
本文介绍了基于OpenCV的图像处理并给出了实例,
利用OpenCV中的函数使图像处理问题变得很简单,具有
很强的实用价值。而且OpenCV免费,源代码公开,其必
将成为图像视频处理领域的强有力的工具。
参考文献
[1] 张汉灵.MATLAB在数字图像处理技术方面的应用
[M].北京:清华大学出版社,2008.
[2] 朱虹.数字图像处理基础[M].北京:北京科学出版
社,2005.
[3] 喻擎苍,翁秀娟,赵匀,等 .交互式开放结构计算机
视觉平台[J].计算机工程与应用,2006,42(23):78-81.
[4] 于仕琪,刘瑞祯.学习OpenCV(中文版)[M].北京:
清华大学出版社,2009.
[5] 阴 法 名 . 基 于 OpenCV 图像处理[J]. 科 技 信
息,2009,(32):220.
[6] 黎松,平西建,丁益 洪,等.开放源代码的计算
机视觉类库OpenCV的应用[J]. 计算机应用与软
件,2005,22(8):134-136.
[7] 方玫,喻擎苍,李华 强,等.C++Builder下基于
OpenCV 的数字图像的处理[J]. 计算机工程与设
计,2008,29(4):882-884.
[8] 刘洁,冯贵玉,张汗灵.一种 图像处理和计算机视觉
的开发工具[J].计算机仿真,2006,23(11):305-307.