NI LabVIEW平台是一个很强大的图型化编程平台。NI也为LV平台提供了许多的工具包,其中就包括机器视觉方面的Vision工具包。
我们使用LabVIEW+Vision工具包编写图像处理软件时,首先就需要采集图像。LabVIEW进行图像采集主要有两种方法,一种是使用工业相机自带的驱动程序,如LabVIEW的驱动、DLL动态链接库等;另一种就是使用NI的IMAQ、IMAQdx驱动进行图像采集。相机自带的驱动我们这里不讲解,因为各个相机厂商自带的驱动也不一样。我们这里讲解一下使用NI IMAQdx驱动进行图像采集。
图1、IMAQdx位置
IMAQdx函数库位于函数>视觉与运动>NI IMAQdx.
在视觉与运动中,我们可以看到第一个位置还有一个IMAQ的函数库。这个主要是由NI认证过了相机以及NI自己的图像采集卡等使用的函数,都符合DCAM。这样才能使用IMAQ。通常在C:UsersPublicDocumentsNational InstrumentsNI-IMAQData中有支持的相机参数文件。
而使用IMAQdx可以支持更多的相机,支持更多的相机属性,而又不需要各个相机都保持统一的属性格式。通常会在C:UsersPublicDocumentsNational InstrumentsNI-IMAQdxData下生成相应的相机属性文件。
下面来看一下IMAQdx函数面板。第一行的函数:
第一个Snap为快拍,即为采集单帧;
第二个configure Grab为配置抓取,即为配置连续采集;
第三个为Grab为采集,其抓取一张图像,并且可以使用WHILE连续抓取图像;
第四个为Sequence为序列,可以抓取多张图像,得到图像数组;
第五个Low-Level为低级函数。可以认为是底层或基本函数,可以使用这些函数完成更灵活的图像采集。IMAQdx面板中的非Low-Level函数基本都以Low-Level函数为蓝本进行整理编写。
第二行的第一个Open为打开函数。即打开相机,获得相机引用;
第二个为属性节点,使用相机引用,设置相机属性;
第三个Close为关闭相机,即销毁相机引用,释放相机资源。
第三行的第一个Enumerate Cameras枚举相机,即罗列出系统中所有NI支持的相机,并得到相机的所有基本信息;
第二个函数Enumerate Attributes枚举属性,即罗列出相机的所有支持的属性;
第三个函数Enumerate Video Modes枚举视频模式,即罗列出相机支持的视频模式,如500万像素的相机支持2588*1940@13FPS,1280*960@30FPS,640*480@60FPS等。
第四行第一个函数Discover Ethernet Cameras为发现以太网相机,即查找网络上的相机。
第二个函数Reset Ethernet Cameras Address为重置以太网相机地址。
下面来看一个具体的采集例子:
图2 IMAQdx图像采集前面板
图3 IMAQdx程序面板
这个例子中,我们使用了枚举相机、打开相机、属性节点、配置抓取、抓取图像、关闭相机等IMAQdx函数节点。其实,在大部分的项目应用中,我们也只需要这些函数。有些时候连第一个枚举相机都不需要,在打开相机前面直接写接口名如cam0、cam1等即可。本例子可以将上面的VI片段下载然后拖到LabVIEW 2011 SP1的程序面板中具体查看。
当然修改相机属性,可以使用属性节点进行设置,也可以使用低级函数中的读写属性节点:
图4 低级函数节点
使用低级函数面板中的第三行的两个函数,可以进行相机属性的读取、写入。可以使用Read Attributes读取相机的所有属性,然后修改后,再使用Write Attributes写入属性。使用这两个函数,可以配合C:UsersPublicDocumentsNational InstrumentsNI-IMAQdxData下的相机属性文件进行操作。