用到IMAQ函数模块的功能进行介绍。
2.2.1 IMAQ USB Grab Setup.vi 初始化USB摄像头获取图像设置。 2.2.2 IMAQ Create.vi
IMAQ图像需要首先在PC内存中创建图像缓冲区。每个缓冲区有唯一的名称,在LabVIEW中通过指针来访问这些缓冲区。因此LabVIEW中的图像数据类型实际是对存储图像的一个特定内存缓冲区的引用。这种机制的原因在于:相比较其他数据类型,图像数据类型通常会占据较大的内存空间。有了一个预先分配好并且可以重复使用的内存空间,就可以避免对同一图像每一步处理之后都要重新分配内存。该函数达到的目的为获取的图像创建内存缓冲区。
图2.2 IMAQ Create.vi
2.2.3 IMAQ Dispose.vi
删除图像数据并清空内存,为下一次图像获取数据腾出内存位置。 2.2.4 IMAQ USB Stop.vi
将USB摄像头停止工作,不再获取图像。 2.2.5 IMAQ USB Close.vi
关闭USB摄像头,停止对摄像头的占用。 2.2.6 IMAQ USB Enumerate Cameras.vi
检测USB接口是否已经USB摄像头设备。如若未连接USB摄像头设备,则该函数返回值为空;若已连接USB摄像头设备,则函数返回值为USB摄像头名称。
6
2.2.7 IMQA USB Init.vi
确定USB摄像头的接入。当有USB摄像头接入时,则输出值为USB摄像头的文件路径。
2.2.8 IMAQ USB PropertyPage.vi
对USB摄像头的功能参数进行设置,以确定USB摄像头设备将要使用的功能将是拍照或者是录像。
2.2.9 IMAQ AVI Get Filter Names.vi
找到电脑上安装的AVI兼容过滤器,每个过滤器都有不同的压缩质量、规模及时间。
2.2.10 IMAQ AVI Create.vi
创建一个新的AVI文件或替换一个旧的AVI文件
图2.3 IMAQ AVI Create.vi
2.2.11 IMAQ USB Grab Acquire.vi
调用USB摄像头快速完成图像数据获取。 2.2.12 IMAQ Add.vi
将两份图像数据Image A和Image B叠加在Image Dst,并将其输出。
图2.4 IMAQ Add.vi
7
2.3 LabVIEW中的程序结构介绍
2.3.1 While循环
While循环在Labview中是一个大小可变的方框,执行框中的程序直到条件端子接收到的布尔值为F值。While循环至少要运行一次且计数从0开始。
图2.5 While循环
2.3.2 For循环
和While循环一样For循环也是一个方框,For循环将制定框图中程序循环次数。因此For循环中没有条件端子而有计数端子,用于制定循环次数。
2.3.3 位移寄存器
移位寄存器可以将数据从一个循环周期传递到另外一个周期。移位寄存器在流程图上用在循环边框上相应的一对端子来表示。右边的端子中存储了一个周期完成后的数据,这些数据在这个周期完成之后将被转移到左边的端子,赋给下一个周期。移位寄存器可以转移各种类型的数据--数值、布尔数、数组、字符串等等。它会自动适应与它连接的第一个对象的数据类型。
2.3.4 条件结构(Case结构)
Case结构含有两个或者更多的子程序(Case),执行那一个取决于与选择端子或者选择对象的外部接口相连接的某个整数、布尔数、字符串或者标识的值。
图2.6 Case结构
8
2.3.5 平铺式顺序结构
包括一个或多个顺序执行的子程序框图或帧。平铺式顺序结构可确保子程序框图按一定顺序执行。平铺式顺序结构的数据流不同于其它结构的数据流。所有连线至帧的数据都可用时,平铺式顺序结构的帧按照从左至右的顺序执行。每帧执行完毕后会将数据至传递至下一帧。即帧的输入可能取决于另一个帧的输出。
图2.7 平铺式顺序结构
2.3.6 事件结构
事件结构包括一个或多个子程序框图或事件分支,结构执行时,仅有一个子程序框图或分支在执行。事件结构可等待直至事件发生,并执行相应条件分支,处理该事件。时间输出对应于使用的控制事件。右键单击结构边框,可添加新的分支并配置要处理的事件。连线事件结构边框左上角的“超时”接线端,指定事件结构等待事件发生的时间,以毫秒为单位。默认值为–1,即永不超时。
事件数据节点位于每个事件分支结构的左边框内侧。该节点用于识别事件发生时Labview返回的数据。依据为各事件分支配置的事件,该节点可显示事件结构每个分支中不同的数据。如配置单个分支处理多个事件,只有所有事件类型支持的数据才可用。
图2.8 事件结构
9
第三章 图像获取程序中子VI的介绍
在正式开发图像获取系统软件前,我们可以事先编写完整几个重要的子VI,以便在主VI中可以顺利调用。另外子VI虽不似主VI般繁琐,但在整个图像获取系统中发挥必不可少的作用。
3.1 InitCam.vi
利用调用“IMQA Enumerate Cameras.vi”来检测USB接口是否已经USB摄像头设备。如若未连接USB摄像头设备,则该函数返回值为空;若已连接USB摄像头设备,则函数返回值为USB摄像头名称。 在“IMQA Enumerate Cameras.vi”子VI输出连接到“索引数组”函数上,“索引数组”的索引值为0,索引的返回值分别接入比较函数“等于?”和索引隧道。比较函数“等于?”的下端接入空字符串,当程序未检测到USB摄像头接入时,由于子“IMQA Enumerate Cameras.vi”返回值为空,通过索引数组改变为标量,则可以与空字符串通过比较函数“等于?”相比较,此时比较函数返回值为T;当程序检测到USB摄像头已接入准备待续,则比较函数返回值为F。
随后我们将用到一个Case结构,比较函数“等于?”的返回值接入条件子端。当比较函数返回值为T,但按钮对话框显示“Error”,并且将T值经过索引隧道发送给名为“Error”的指示灯显示控件,另外将一个空文件经过索引隧道传递给名为“Direct Show Camera RefNum”的控件。“Direct Show Camera RefNum”
10
基于Labview的图像获取
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)