OpenCV 简介

摘要:OpenCV是近年来推出的开源、免费的计算机视觉库,利用其所包含的函数可以很方便地实现数字图像

和视频处理。同时利用面向对象的VC++ 6.0编程工具,用C++语言进行程序编写,大大提高了计算机的运行

速度。本文首先阐述了OpenCV的特点以及结构,然后以平滑处理、图像形态学为例介绍了OpenCV在数字图

像处理中的典型应用。OpenCV算法库为VC++编程处理数字图像提供了很大的方便,其必将成为图像视频处

理领域的强有力的工具。

关键词:OpenCV;平滑处理;图像形态学

0   引言

人类离不开图像,画面比文字更形象生动,人类70%

以上的信息来自视觉。近年来,数字图像处理发展迅速,

实用价值高,应用范围极为广泛,现已应用于军事技术、

政府部门和医疗卫生等多种领域。数字图像处理研究内容

很广泛,归纳起来有如下几个方面图像数字化、图像压缩、

图像增强、图像分析、图像恢复。

随着数字图像处理的日益广泛,众多应用于计算机视

觉和图像处理的软件包相继被开发出来。从文献[3] 可知,

大多数软件包基于计算速度的角度考虑,采用 C/C++编写

的。虽然这些软件包对计算机图像处理和计算机视觉的研

究提供很大的便利,但也存在着不足之处:①大多数软件

包没有高级数学计算函数;② MATLAB虽提供了较为丰富

的数学函数,但其运行速度令人担忧;③大部分软件包不

支持网络服务器结构的应用程序的开发;④绝大多数软件

包不支持可嵌入性。

OpenCV图像处理算法库在VC++编译环境下运行,

为数字图像的处理、计算机视觉技术应用提供了极大的方

便。它不仅是完全免费的开源软件而且它包含非常丰富的

各类图像处理及识别的函数。本文主要介绍基于OpenCV

的图像处理的特点以及实例。

1   OpenCV

OpenCVopen source computer vision library)诞生于

Intel 研究中心,是一个开放源码的计算机视觉库。OpenCV 

采用C/C++ 语言编写,可以运行在Linux/Windows/Mac

操作系统上。OpenCV 还提供了PythonRubyMATLAB

以及其他语言的接口 。它包含的函数有500多个,覆盖

了计算机视觉的许多应用领域,OpenCV主体分为5个模块,

其中4个模块如图1所示。

  

CV 

图像处理和视觉

算法 

MLL 

统计分类器 

      H ighGUI 

GUI 、图像和视

频输入、输出 

                      CXCORE 

基本结构和算法、XML支持、绘图函数 

1   OpenCV的基本结构

1中并没有包含CvAux模块,该模块中一般存放一

些即将被淘汰的算法和函数,同时还有一些新出现的实验

性的算法和函数。

依据文献[5-7] 总结归纳了一下OpenCV的优点,主

要体现在如下几个方面:

① 跨平台,可移植性好。OpenCV是由跨平台的

中、高层API构成,很好的支持 WindowsLinuxUnix

MacOSX等操作系统,可以在大多数的 C/C++ 编译器下工

作;

② 独立性好。OpenCV包含500多个函数,不依赖外

部库,既可以独立运行,也可以在运行时使用其他外部库; 

③  源代码公开。开发者可以对源代码进行修改,将自

己设计的新类添加到库中,只要设计符合规范,自己的代

码也可以被别人广泛使用;

④ 具备强大的图像和矩阵运算能力。具有丰富的函数

处理函数,减少开发者的工作量,有效提高开发效率和程

序运行的可靠性;

⑤ 运行速度快,OpenCV使用优化了的CC++代码

实现,大大提升了计算机的运行速度。

总之,有了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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值