基于OpenCV多源图像的整合研究

2015-03-06 08:06
关键词:程序员二次开发图像处理

尧 燕

(深圳职业技术学院 机电工程学院, 深圳 518055)



基于OpenCV多源图像的整合研究

尧 燕

(深圳职业技术学院 机电工程学院, 深圳 518055)

图像因为不同的应用需求有不同的数据格式,同一系统中对不同源的图像数据分析是较困难的.OpenCV的开源性及可扩展性为基于图像的软件系统提供了较好的整合方案.在研究了OpenCV的特性和配置方法后,利用OpenCV,为多源图像的整合提供了简单可行的方法.

OpenCV;多源图像;整合;机器视觉

多媒体技术的出现为计算机深入日常娱乐提供了丰富的内容,声音和图像为多媒体的核心内容.图像因为各种原因有不同的格式,有较常见的JPG、BMP、DIB和PNG等,以及其它特殊的格式如TGA、TIFF、RAS及PSD等.它们展现在用户面前的视觉效果区别不大,但是图像格式却是各有不同.软件系统读取图像时,需要分别分析各种图像的头数据和及其对应的编码格式,然后采用不同的解码方法呈现在用户前面.因此,程序员需要了解各种图像文件的头数据和编码格式,增加了程序员的难度[1].OpenCV为程序员提供了通用的接口,具有高效的图像处理算法,为以图像为基础的机器视觉处理软件提供了强大的基础,可以为多图像源的整合提供很好的支持.

1 OpenCV的特点

OpenCV(Open Source Computer Vision Library)是一个开源的图像处理算法库,它包含了一系列的C函数和C++类,实现了图像处理和计算机视觉方面的很多通用的算法.它不需要依赖外部的库,因而可以直接应用于很多领域,作为二次开发的理想工具[2].它具有以下特点:

(1)跨平台:可以运行在Windows、Linux及其它嵌入式操作系统中,独立于硬件;

(2)免费:它的源代码是开放的,任何公司或个人都可以用它进行商业或非商业开发;

(3)可扩展性好:它包括了底层和高层的应用开发包;

(4)通用的模块构成:有CxCore和Cv等,使用方便.

2 OpenCV的配置

安装好OpenCV后,需要对其进行编程环境的配置[3].

首先设置电脑操作系统的变量.Windows操作系统方法如下:右击我的电脑,依次选择属性->高级->环境变量->path->C:Program FilesOpenCVin.结果如图1所示.

图1 设置系统变量

为了防止编译系统每次都把相关的CPP文件复制到编译的工程下,设置编译系统的全局变量.以Microsoft Visual Studio 2005为例,选择菜单工具->选项->项目与解决方案,首先设置库文件的路径:C:Program FilesOpenCVlib,如图2所示.

图2 库文件的设置

然后设置包含文件的路径:

C:Program FilesOpenCVcxcoreinclude C:Program FilesOpenCVcvinclude

C:Program FilesOpenCVcvauxinclude C:Program FilesOpenCVotherlibshighgui

C:Program FilesOpenCVmlinclude C:Program FilesOpenCVotherlibscvcaminclude

结果如图3所示.

图3 包含文件的设置

最后再设置源文件的路径:

C:Program FilesOpenCVcvsrc C:Program FilesOpenCVcvauxsrc

C:Program FilesOpenCVcxcoresrc C:Program FilesOpenCVmlsrc

C:Program FilesOpenCVotherlibscvcamsrc

结果如图4所示.

图4 源文件的设置

因为项目编译需要用到OpenCV的库文件,所以建立好项目后,选择该项目的属性-> 配置属性-> 连接器->输入->附加依赖项中添加:cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib等库.这样就可以配置好OpenCV,充分利用OpenCV强大的图像处理能力为二次开发提供帮助.

3 利用OpenCV整合多源图像数据

机器视觉系统的第一步一般就是读取各种源的图像,然后对图像进行二值化、边缘提取及腐蚀等操作.图像因为源的不同会有各种不同的格式,如较常见的JPG、BMP、DIB和PNG等,以及其它特殊的格式如TGA、TIFF、RAS及PSD等.逐个分析图像的头文件及其对应的压缩编码方式是极其复杂的,充分利用OpenCV的强大功能可以整合各种不同源的图像数据[4].

OpenCV的图像类IplImage为图像数据的创建和处理提供了容器,可以采用cvCreateImage()函数生成图像,也可以采用cvLoadImage()读取已经有的图像.要使用该类,先定义它,如:IplImage* img,然后把图像读取并赋予它,下面为读取图像的代码片段.

void CMy22Doc::Load()

{

if(img != NULL)

cvReleaseImage(&img); //如果img有数据,释放该数据

img = cvLoadImage(m_sCurrFile, -1); //读取数据到img

imgSrc = cvLoadImage(m_sCurrFile, -1); //读取数据到imgSrc备份居中用

CRect rect;

CFrameWnd *pFrame=(CFrameWnd*)AfxGetMainWnd();

pFrame->GetActiveView()->GetClientRect(&rect);

float y = (float)rect.Height() / imgSrc->height;

float x = (float)rect.Width() / imgSrc->width;

float ratio = x < y ? x: y;

if(ratio < 1)

ZoomEx(ratio, imgSrc, &img); //重新生成居中的图像

}

然后用img.Show(pDC->m_hDC, x, y, pDoc->img->width, pDoc->img->height, 0, 0)的方法在Windows窗口中显示出来[5].

4 结束语

在多媒体技术中,图像的多样性适应了不同的应用环境,但多样的格式却为程序的处理带来了不便.OpenCV采用开放性以及跨平台的模块化操作模式,为基于图像的机器视觉系统二次开发提供了方便.其对多源图像的整合,以及在其基础上进行图像形体学的处理,对快速开发提供了强大的支持,因而值得深入研究.

[1] 吴仰玉,纪 峰,常 霞,等.图像融合研究新进展 [J]. 科技创新导报,2013(1):49-52.

[2] 黎 宁,张文娜.基于NSCT变换的多源图像融合并行算法[J]. 计算机与数字工程,2012(8):104-106.

[3] 滕 俊,王弟林,文汉云.基于OpenCV下的Visual C++数字图像处理方法[J].现代计算机,2012(4):70-73.

[4] 秦小文,余红英.基于OpenCV的图像分割[J]. 科技信息,2011(14):43-44.

[5] 黄文明,徐锦法.基于机器视觉的通孔元器件检验[J].中国科技博览,2013(13):289-290.

Study of Integration Multisource Images Based on OpenCV

YAO Yan

(School of Mechanical and Electrical Engineering,Shenzhen Polytechnic, Shenzhen 518055, China)

Because the demands of different applications, images have different formats. And it is difficult to analyze multisource images in a system. OpenCV is useful to integrate multisource images because it is open source and extendibility. After analyzing the features of OpenCV, a feasible way to integrate multisource images is put forward based on it.

OpenCV; multisource image;integration; machine vision

2014-11-12

中国高等职业技术教育研究会研究项目(GZYLX1213350);深圳教育学会研究项目(ZD-2011006).

尧 燕(1976-),男,硕士,讲师,研究方向:CAD及科学计算可视化.

TP391

A

1671-119X(2015)02-0059-03

猜你喜欢
程序员二次开发图像处理
为了让妈妈看懂地图,一位“野生程序员”做了个小程序
怎样成为一名优秀程序员
浅谈基于Revit平台的二次开发
基于ARM嵌入式的关于图像处理的交通信号灯识别
浅谈Mastercam后处理器的二次开发
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
程序员之子
西门子Easy Screen对倒棱机床界面二次开发
加班