当前位置:
文档之家› 基于LabVIEW的图像采集系统设计_何志杰
基于LabVIEW的图像采集系统设计_何志杰
收稿日期:2009-05-06 作者简介:何志杰(1982-),男,福建福清人,硕士,福建师范大学物理与光电信息科技学院助教。 * 基金项目:国家自然科学基金项目(编号:10575022)
第5期
何志杰:基于 LabVIEW 的图像采集系统设计 *
13
VFH.H 动态链接库
通用 USB 摄像头
LabVIEW 图像采集系统
当用户已经有了现成的 DLL 或自己有能力开发 DLL 文件时,可以采集动态链接库机制。它具 有增强 LabVIEW 程序接口驱动能力、模块化设计、升级维护方便和节省内存空间等优点。Lab- VIEW 中调用 DLL 步骤如下: (1)将经 Visual C++ 6.0 环境编译完成的动态链接库 VIDEO.DLL 存入预定目录; (2)在 LabVIEW 8.0 的流程图设计窗口中,选择功能模板中 Advance 子模板下的 Call Library Fun- tion 节点,放置于流程图窗口中。其端口如图 2 所示。
Байду номын сангаас
图 1 系统结构框图
2.1 VFW 简介 随着社会的发展,人们对多媒体技术的需求也越来越高,已经不满足单一的通信功能,要求影
像与声音的同步服务,如可视电话、视频会议、各种实时监控系统、报警系统等,而数字视频技术则 是多媒体技术的核心之一。微软推出的数字视频处理软件开发包 Video for Windows,大大简化了数 字视频捕获这一原本很复杂的工作,利用它可以很方便的将模拟视频信号数字化,并支持进一步 处理和播放,为开发实时视频应用程序开辟了道路[1]。
对于图像采集,NI 公司提供的图像处理工具包(IMAQ)具有强大的图像处理功能,在它的基础 上开发的虚拟仪器具有快捷、高效的特点,但是必须先安装 NI 公司配套的图像采集卡。LabVIEW 仪器驱动程序可以使用户不必学习各种仪器的低级编程协议,从而简化了仪器的控制,缩短了测 试开发时间。NI 公司的 IMAQ 产品为图像采集分析系统提供了完整的解决方案,然而 LabVIEW 配 套的图像采集卡成本较高。很多用户使用的并不是 NI 公司的图像采集卡甚至是自行研制的专用 图像采集卡。由于这些图像采集卡一般并不提供直接面向 LabVIEW 的驱动程序软件,而通常提供 面向许多常用的编程语言,如:Visual C++、Borland C++及 Visual Basic 的驱动程序软件,如果想利 用 LabVIEW 来开发基于非 NI 设备的应用程序,LabVIEW 与硬件设备的通讯的最佳方案就是采用 LabVIEW 中提供的动态链接库机制来实现。
图 3 系统初始化模块部分源代码
16
福建师范大学福清分校学报
2009 年 9 月
(2) 图像采集模块 通过调用 DLL 文件中的 GetCapInfo()函数,实现对当前帧图像数据的采集、传输。该函数以
// 口的父窗口
DeviceID
// 捕获设备序号:0~9
);
(2)连接捕获设备
if( ! capDriverConnect(hWndC, DeviceID) )
{
DestroyWindow(hWndC); // 销毁句柄
return DriverConFail; // 连接设备失败
}
(3)设置显示模式及速率
本系统独立于 NI 公司昂贵的图像采集卡,采用通用的 USB 摄像头采集设备。应用 LabVIEW 平台开发图像采集系统,是一个崭新的尝试,扩展了虚拟仪器的应用范围。 2 系统总体设计
首先在 Visual C++ 6.0 软件开发平台下,根据视频捕获(Video For Windows)的相关知识,采用 动态链接库技术开发能够与通用 USB 摄像头采集设备通信的 DLL 文件。紧接着,在虚拟仪器 LabVIEW 8.0 平台下根据 CLF 调用编译生成的 DLL 文件,开发出具备设备连接、设备信息查询、图 像采集、显示等功能的模块,并利用这些模块实现 LabVIEW 平台上的图像驱动和采集功能。系统 结构框图如图 1 所示。
capPreviewRate(hWndC, CapRate); // 设置捕获速度
if( ! capPreview(hWndC, TRUE) )
{
capDriverDisconnect(hWndC);
// 断开连接
DestroyWindow(hWndC);
// 销毁句柄
return PreviewFail;
图 2 Call Library Function 函数
(3)双击 Call Library Funtion 函数模块,弹出对话框,正确填写、配置各参数。 (4)配置完毕之后,单击 OK 键,退出对话框。这样就成功调用了一个 DLL 文件。 2.3.2 LabVIEW 程序的编写 (1)初始化模块
通过调用动态链接库中的初始化函数 Init(i ),在 LabVIEW 中实现系统的初始化工作。该函数 通过返回值来判断初始化工作状态,并在 LabVIEW 程序中通过对话框的形式告知用户。其部分 代码如图 3 所示:
dwSize = VideoData->dwBytesUsed;
for(i=dwSize-1; i > 2; i-=3)
{
RGB[j++] = pImage[i];
RGB[j++] = pImage[i-1];
RGB[j++] = pImage[i-2];
}
2.2.4 保存视频数据
capFileSetCaptureFile(hWndC, AVINAME); // 设置保存文件的文件名
在 LabVIEW 中开发设备驱动程序有 3 种方法:直接对端口进行读写、通过 CLF(Call Library Function)节点调用 DLL 函数以及通过代码接口节点(CIN)调用由 C 语言编写的程序[6]。
使用代码接口节点时,LabVIEW 将其装载到主要应用程序相同的存储空间中,所以通过外部 的编译软件编译的 C 语言代码应当具有重定位性。这使得对 C 代码的编译环境有了一定的限制。
协调这 6 大模块之间的工作,可以完成视频图像的捕获、播放、编辑、文件管理等功能[2]。 2.2 VC++ 6.0 下视频捕获动态链接库(DLL)的编写
DLL 是包含若干个函数的库文件,应用程序使用 DLL 中的函数之前,应该先导出这些函数,以 便供给应用程序使用。要导出这些函数有两种方法,一是在定义函数时使用导出关键字 _declspec (dllexport)。微软在 32 位的 Visual C++上用 _declspec(dllexport)取代了原本 16 位版本上的 _export 关键字。使用 _declspec(dllexport)关键字可以确定函数是否存在于 DLL 中,以便编译器可以生成跳 过间接寻址级别的,经常出现在跨 DLL 边界的函数调用中的代码。为方便使用,我们经常库文件中 进行宏定义 #define EXPORT _declspec(dllexport);另外一种方法是在创建 DLL 文件时使用模块定 义文件.Def[3][4]。
LabVIEW 是一个革命性的图形化编程平台,它在数据采集(data acquisition,简称 DAQ)、虚拟 仪器软件框架(virtual instrument software architecture,简称 VISA)、通用接口总线(general purpose interface bus,简称 GPIB)及串口仪器控制、图像处理、运动控制(motion control)、数据分析和图表显 示方面都具有强大的优势。 2.3.1 LabVIEW 对动态链接库的调用
// 预览失败
}
2.2.2 获取捕获设备名称及版本信息
capGetDriverDescription(DeviceID,TempName, sizeof (TempName), TempVersion,
pVersion))
2.2.3 采集、保存当前帧图像信息
pImage = VideoData->lpData;
VFW 主要由以下 6 个模块组成: (1)AVICAP.DLL:主要实现视频捕获功能,包含了用于视频捕获的函数,为音像交错 AVI (Audio video interleaved)格式文件和视频、音频设备程序提供一个高级接口。 (2)MSVIDEO.DLL:能够将视频捕获窗口与获驱动设备连接起来,支持 ICM 视频编码服务。 (3)MCIAVI.DRV:包含 MC(I Media control interface)命令解释器,实现回放功能。 (4)AVIFILE.DLL:提供对 AVI 文件的读写操作等文件管理功能。 (5)ICM ( Installable compression manager ):即压缩管理器,提供对存储在 AVI 文件中视频图像数 据的压缩、解压缩服务。 (6)ACM ( Audio Compression Manager ):即音频压缩管理器,提供实时音频压缩及解压缩功能。
关键词:LabVIEW;虚拟仪器;动态链接库;视频捕获
中图分类号:TN911.73
文献标识码:A
文章编号:1008-3421(2009)05-0012-06
1引言 图像是人类通过视觉来感知外界事物,在人脑意识中形成的客观存在,是人类获取外部信息
的重要来源。随着科学技术的迅猛发展和生产力水平的大幅度提高,图像的采集和处理的应用领 域扩展到了人类生活和工作的方方面面。
2009 年第 5 期 总第 94 期
《福建师范大学福清分校学报》 JOURNAL OF FUQING BRANCH OF FUJIAN NORMAL UNIVERSITY
Sum No.94
基于 LabVIEW 的图像采集系统设计*