一种基于Labview的高速图像采集方法

文档序号:6364231阅读:2590来源:国知局
专利名称:一种基于Labview的高速图像采集方法
技术领域
本发明涉及一种图像采集技术,特别涉及一种基于Labview的高速图像采集方法。
背景技术
在工业检测领域,电子检测技术已经逐步取代传统人工检测方法,其中图像处理技术发展尤为迅猛。将计算机的高速性、可靠性和可重复性与图像处理技术相结合进行视觉检测,具有自动化、非接触、高精度和高速等特点,可极大提高检测效率。随着工业检测要求的不断提高,图像处理技术的硬件设备也在不断地升级更新。图像采集卡采用PCI-E 高速总线接口,相较于PCI总线接口,能大幅提升图像传输以及采集的速率。工业摄像头的分辨率以及帧速也随之发展得到了大幅提高,性能指标也更加稳定、可靠。LabVIEW是由美国国家仪器(National Instruments)提供的一款图形化编程软件,其结合虚拟仪器技术可以快速开发测试程序,具备良好的工业检测设备接口和涵盖视觉、运动控制、嵌入式开发、总线通讯等强大的功能模块,广泛应用于工业测控领域。DALSA公司所生产FA-21-1M120-00-R型号的高速摄像头达到1024*1024的分辨率,每秒120帧的高速图像采集帧速,在视觉检测中具有良好的性能,并且提供C++、dotNet 函数开发包,利于根据检测要求进行二次开发。但是没有专门针对LabVIEW的程序驱动接口,不能被LabVIEW直接应用,所以需要用户开发与之兼容的驱动程序。

发明内容
本发明是针对现在高速图像采集驱动应用技术跟不上的问题,提出了一种基于 Labview的高速图像采集方法,采用DALSA公司提供的Sapera++ LT函数开发包,编写DLL 动态链接库由LabVIEW调用,完成对高速摄像头FA-21-1M120-00-R的图像采集以及实时控制。本发明的技术方案为一种基于Labview的高速图像采集方法,其特征在于,包括高速摄像头、图像采集卡以及工控机,高速摄像头通过专用的图像采集线缆与图像采集卡连接,图像采集卡装在工控机上,工控机采集包括如下具体步骤
O创建结构体数组allimaq[BUFSIZE],其中包括*pBuffer指针用于存放图像地址, i_full布尔型变量用于判断是否存取图像,其中宏定义BUFSIZE为需要存放图像的内存数量,初始化整型变量ai,aj=0,其中ai为回调函数的图像存取序号,aj为图像存入内存序号;
2)配置采集信息包括连接图像采集卡,选择与图像采集卡连接的高速摄像头,调用外部ccf文件配置高速摄像头各个采集参数;
3)创建图像缓存空间,判断是否开始采集图像;
4)开始采集图像,判断allimaq[aj]·i_full的状态是否为true,若是,说明新的一中贞图像已经采集完毕,可以进行传输操作;同时把allimaq[aj].pBuff中的图像数据输出,使allimaq[aj]. i_full为false,并aj++ ;否则,说明新的图像还未采集到;
5)当停止拍摄时,释放配置图像采集卡、高速摄像头以及所创建的图像数组的内存空
间;
6)每次拍摄一帧图像时,程序会自动转入回调函数中,进行图像的存储操作,包括如下步骤
A:将采集到的图像放入图像缓存中;
B :图像缓存中所存储的图像,传递至allimaq[ai]. pBuff中;
C :清除及释放图像缓存;
D :ai++ ;
7)步骤6)结束后,译生成DLL动态链接库,包括初始化函数(DALSA_Init)、开始拍摄函数(DALSA_Start)、采集图像函数(DALSA_Snap )、停止拍摄函数(DALSA_Stop ),使用 LabVIEW的Call Library Function Node调用上述DLL动态链接库的函数,完成对高速摄像头的图像采集及控制,具体步骤包括如下
I)调用DALSA_Init函数,初始化高速摄像头、图像采集卡,创建一维图像数组,数组长度为1048576,创建图像缓存;
II)调用DALSA_Start函数,开始进入拍摄状态;
III)调用DALSA_Snap采集图像函数,将输出的一维图像数组转换为二维图像数组,转换后的二维图像数组大小为1024*1024,通过LabVIEW的Vision模块的IMAQ ArrayToImage. Vi将二维图像数组以图像形式显示;
IV)调用DALSA_Stop函数,停止拍摄,清理释放所占用的内存空间。本发明的有益效果在于本发明基于Labview的高速图像采集方法,通过LabVIEW 本高速图像采集驱动程序完成了高速摄像头对图像的采集及对高速摄像头各参数的设置, 具有闻速、实时、稳定的优点。


图I是本发明基于Labview的高速图像采集方法中高速图像采集驱动程序的硬件结构框图2是本发明基于Labview的高速图像采集方法中DLL动态链接库的软件流程图3是本发明基于Labview的高速图像采集方法中DLL动态链接库中回调函数的软件流程图4是本发明基于Labview的高速图像采集方法中LabVIEW调用DLL动态链接库函数的软件流程图。
具体实施例方式本发明利用DALSA公司提供的高速摄像头、图像采集卡以及提供的C++函数开发包Sapera++ LT,编译生成DLL动态链接库,通过上层LabVIEW调用,实现高速摄像头的采集及控制。如图I所示硬件结构框图,其包括高速摄像头、图像采集卡以及工控机,所述高速摄像头型号为FA-21-1M120-00-R,连接所述图像采集卡。所述的图像采集卡型号为x64-Xcelera-CL LX1,并与所述的高速摄像头兼容,通过专用的图像采集线缆连接。所述的工控机安装有所述的图像采集卡,完成程序控制。如图2所示DLL动态链接库的软件流程图,具体的运行步骤如下
1)创建结构体数组allimaq[BUFSIZE],其中包括*pBuffer指针用于存放图像地址, 布尔型变量用于判断是否存取图像,其中宏定义BUFSIZE为需要存放图像的内存数
量,初始化整型变量ai,aj=0,其中ai为回调函数的图像存取序号,aj为图像存入内存序号;
2)配置采集信息包括连接图像采集卡,选择与图像采集卡连接的高速摄像头,调用外部ccf文件配置高速摄像头各个采集参数;
3)创建图像缓存空间,判断是否开始采集图像;
4)开始采集图像,判断allimaq[aj].i_full的状态是否为true,若是,说明新的一中贞图像已经采集完毕,可以进行传输操作;同时把allimaq[aj].pBuff中的图像数据输出,使 allimaq[aj]. i_full为false,并aj++ ;否则,说明新的图像还未采集到;
5)当停止拍摄时,释放配置图像采集卡、高速摄像头以及所创建的图像数组的内存空间。其中主要包括初始化函数(DALSA_Init)、开始拍摄函数(DALSA_Start)、采集图像函数(DALSA_Snap)、停止拍摄函数(DALSA_Stop)。核心代码如下
void Dalsa_Init (char* path_name)//初始化函数
for (i=0; i<FRAMESIZE; i++)// 初始化结构体数组
{
allimaq[i]. pBuffer= new BYTE[1024*1024]; allimaq[i]. i_full=false;
Acq->Create (); Buffers->Create() Xfer->Create ();
void Dalsa_Start(void)
分配图像采集设备底层资源创建图像采集缓存空间创建图像传输通道
Il开始拍摄函数
Xfer->Grab ()
采集图像
void Dalsa_Snap(BYTE氺 disimage)
for (i=0;i<1024;i++) for (j=0;j<1024;j++)
采集图像函数
disimage [i*1024+j] = allimaq[aj]. pBuffer [i* 1024+j] //米集图像void Dalsa_Stop(void)
停止拍摄函数
Xfer->DestroyO ; Buffers->Destroy(); Acq->Destroy(); delete[] arrbuf; for (i=0;i<BUFSIZE;i++)
释放传输通道
Il释放图像缓存空间释放图像采集设备内存空间 //清除释放图像数组清除释放结构体数组
delete [] allimaq[i]. pBuffer;
如图3所示回调函数的软件流程图,具体的运行步骤如下
1)将采集到的图像放入图像缓存中;
2)图像缓存中所存储的图像,传递至allimaq[ai].pBuff中
3)清除释放图像缓存;
4)ai++。主要的核心代码如下
static void myCallback(SapXferCalIbackInfo 氺plnfo)
Buffers->GetAddress (ai, O, 1024*1024,(void**)&imaqbuf) memcpy(allimaq[ai]· pBuff, imaqbuf, 1024*1024);
Buffers->ReIeaseAddress((void*)imaqbuf);
allimaq[ai]. i_full=true;
ai++;
if (ai==BUFSIZE) {ai=0;}
Il回调函数
//将图像放入缓存将缓存中图像导出释放缓存
如图4所示LabVIEW调用DLL动态链接库函数的软件代码,具体的运行步骤如下
1)调用DALSA_Init函数,初始化高速摄像头、图像采集卡,创建一维图像数组,数组长度为1048576,以及创建图像缓存;
2)调用DALSA_Start函数,开始进入拍摄状态;
3)调用DALSA_Snap采集图像函数,将输出的一维图像数组转换为二维图像数组,转换后的二维图像数组大小为1024*1024,通过LabVIEW的Vision模块的IMAQ ArrayToImage. Vi将二维图像数组以图像形式显示;
4)调用DALSA_Stop函数,停止拍摄,清理释放所占用的所有内存空间。
权利要求
1.一种基于Labview的高速图像采集方法,其特征在于,包括高速摄像头、图像采集卡以及工控机,高速摄像头通过专用的图像采集线缆与图像采集卡连接,图像采集卡装在工控机上,工控机采集包括如下具体步骤O创建结构体数组allimaq[BUFSIZE],其中包括*pBuffer指针用于存放图像地址, i_full布尔型变量用于判断是否存取图像,其中宏定义BUFSIZE为需要存放图像的内存数量,初始化整型变量ai,aj=0,其中ai为回调函数的图像存取序号,aj为图像存入内存序号;2)配置采集信息包括连接图像采集卡,选择与图像采集卡连接的高速摄像头,调用外部ccf文件配置高速摄像头各个采集参数;3)创建图像缓存空间,判断是否开始采集图像;4)开始采集图像,判断allimaq[aj]·i_full的状态是否为true,若是,说明新的一中贞图像已经采集完毕,可以进行传输操作;同时把allimaq[aj].pBuff中的图像数据输出,使 allimaq[aj]. i_full为false,并aj++ ;否则,说明新的图像还未采集到;5)当停止拍摄时,释放配置图像采集卡、高速摄像头以及所创建的图像数组的内存空间;6)每次拍摄一帧图像时,程序会自动转入回调函数中,进行图像的存储操作,包括如下步骤A:将采集到的图像放入图像缓存中;B :图像缓存中所存储的图像,传递至allimaq[ai]. pBuff中;C :清除及释放图像缓存;D :ai++ ;7)步骤6)结束后,译生成DLL动态链接库,包括初始化函数(DALSA_Init)、开始拍摄函数(DALSA_Start)、采集图像函数(DALSA_Snap )、停止拍摄函数(DALSA_Stop ),使用 LabVIEW的Call Library Function Node调用上述DLL动态链接库的函数,完成对高速摄像头的图像采集及控制,具体步骤包括如下I)调用DALSA_Init函数,初始化高速摄像头、图像采集卡,创建一维图像数组,数组长度为1048576,创建图像缓存;II)调用DALSA_Start函数,开始进入拍摄状态;III)调用DALSA_Snap采集图像函数,将输出的一维图像数组转换为二维图像数组,转换后的二维图像数组大小为1024*1024,通过LabVIEW的Vision模块的IMAQ ArrayToImage. Vi将二维图像数组以图像形式显示;IV)调用DALSA_Stop函数,停止拍摄,清理释放所占用的内存空间。
全文摘要
本发明涉及一种基于Labview的高速图像采集方法,包括高速摄像头、图像采集卡以及工控机,高速摄像头通过专用的图像采集线缆与图像采集卡连接,图像采集卡装在工控机上,采用DALSA公司提供的Sapera++LT函数开发包,编写DLL动态链接库由LabVIEW调用,完成对高速摄像头FA-21-1M120-00-R的图像采集以及实时控制。通过LabVIEW本高速图像采集驱动程序完成了高速摄像头对图像的采集及对高速摄像头各参数的设置,具有高速、实时、稳定的优点。
文档编号G06F9/44GK102611836SQ201210024840
公开日2012年7月25日 申请日期2012年2月6日 优先权日2012年2月6日
发明者张彩艳, 戴曙光, 穆平安, 邬敏杰, 金晅宏 申请人:上海理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1