LabVIEW图像采集相关(一)
扫描二维码
随时随地手机看文章
单次采集图像时,常用Snap.vi来编程。,如果我们连续采集的话,就会想到如下的模式。?snap
但是上图中的模式,采集图像比较慢,因为Snap.vi都包含了初始化和关闭等环节,最快的情况下也得需要120ms。NI为了解决这种问题,添加了Grab.vi来实现连续采集。程序框图如下:
?grab这种情况下一帧数据大约需要40ms。
?然而,在高速图像采集的应用中,我们会发现上一种模式也会存在一定的问题,即当图像采集速度非常高时,处理程序还来不及处理当前的图像,图像缓冲区里面的数据已经被新的图像数据所覆盖了。
为了解决采集缓冲区不足的问题,我们可以增加图像采集缓冲区。
NI-IMAQ提供了两种多缓冲区的方式,分别为Sequence和Ring。
?Sequene和RingSequence和Ring都是多缓冲区图像采集方式,区别是Sequence是单次采集,而Ring是连续采集,类似Snap和Grab。
?Sequence.vi最最重要的参数是Imahes In,这是一个图像数据缓冲区引用数组,里面包含了多个由Imaq Create.vi创建的图像数据缓冲区的引用。只有知道了多个图像数据缓冲区在哪里,IMAQ Sequence.vi才能完成多缓冲区的图像采集。
?Sequnce应用:
?sequence应用Ring图像采集方式(IMAQ的方式,IMAQdx还不太一样):
Ring图像采集方式需要由三个VI来实现,分别是IMAQ Configure List.vi?、IMAQ Configure Buffer.vi和IMAQ Extract.vi。
?IMAQ Configure List.vi完成缓冲区列表的配置,告诉驱动程序缓冲区的数量,以连续还是单次的方式进行图像采集以及缓冲区的位置。
?IMAQ Configure Buffer.vi把创建好的图像缓冲区分配到缓冲区列表的对应位置。
?IMAQ Extract Buffer.vi把采集到的图像从缓冲区中提取出来,为后续图像处理做准备。
如下图所示(由于图过长,仅截取关键代码)?
?第一步,调用IMAQ Configure List.vi告诉驱动程序是以Continuous的方式进行图像采集,缓冲区的位置在system—也就是开发引用程序的主机上。
第二步,调用?IMAQ Configure Buffer.vi把创建好的图像缓冲区关联到缓冲区列表的对应位置上。
?第三步,调用IMAQ Start.vi开启一个图像采集的过程,需要注意的是,在调用IMAQ Start.vi前,必须调用IMAQ Configure List.vi和IMAQ Configure Buffer.vi来配置采集过程。
第四步,调用?IMAQ Extract Buffer.vi从缓冲区中把图像提取出来。
第五步,把IMAQ Extract Buffer.vi的Buffer to Exact参数设置为-1?表示释放当前被提取的缓冲区。IMAQ Extract Buffer.vi在提取图像数据时会对当前被提取的缓冲区进行保护,所以当采集过程完成时,需要释放当前被保护的缓冲区。
Ring图像采集方式实现的主要过程如上所述,其余步骤就是大家熟悉的初始化采集硬件、释放图像采集硬件和释放缓冲区了。