好文档 - 专业文书写作范文服务资料分享网站

基于Labview的图像获取

天下 分享 时间: 加入收藏 我要投稿 点赞

4.2 程序运行部分

图像获取过程程序会有三个不同的事件分支,我们使用事件结构对不同情况进行图形语言编写。

4.2.1事件结构的内容介绍

在我们选用的层叠式结构中共有三个子程序框图分别是“Run”、“超时”和“Exit”。由于三个子程序的复杂情况各有不同,我们用倒叙从简单开始介绍。

当“Exit”的值发生改变,即在前面板中按下名为“Exit”的停止按钮,此时流程图与Case结构语句F值情况相同:发送T常量值给While循环中条件端子,由条件端子T值是停止结束While循环。“InitCam.vi”的文件路径输出与错误输出直接连接到整个VI最末端的“IMQA USB Close.vi”上,关闭USB模块结束程序。

当发生“超时”情况时,则禁用前面板的输入控件包括:“Run”、“Exit”、“ Number of frames to acquire”、“ Exposition time per frame (1/30 s)”。并且发送F值给外围While循环的条件子端即While循环将继续循环运行。

图4.1 “超时”

当“Run”的只发生改变,图像获取软件进入工作状态。 4.2.2 图像获取过程介绍

在“Run”只改变的情况中,我们需要编写一个记录每帧图像获取的文件。

16

我们输入数值常数控件来作为所创文件名称,通过一个数值至十进制数字符串转换函数将数值转换为字符串,并与字符串“.txt”利用连接字符串函数得到文件名称。接下来将我们选定的路径作为基路径,连入文件名称,用一个创建路径来创建我们所需的文件路径。随后,就可以把创建的文件路径连入打开/替换/创建文件函数用来替换旧文件或者创建新文件。该函数的操作是“replace or create”,提示是字符串“0”,输出的引用句柄进入子While循环的索引隧道。

我们介绍的第二个While循环是图像获取系统的主体部分,大致可以分为三个部分。最重要的一部分便是图像获取。在前面介绍“ReadDataCam.vi”子VI中可知我们需要创建三个分别名为“Sunmm”、“Dst”、“Cam”的图像缓存位置,并将三张图像的图像类型设置为“RGB(U32)”。然后,运用子VI“ReadDataCam.vi”,连入三份图像数据内存位置,加上输入我们所需的曝光时间“Exposition time per frame (1/30 s)”便可得到获取的图像数据“Dst Image”和每一帧获取的图像数据“Cam Image”。获取的“Dst Image”图像数据连接入“IMAQ AVI Write Frame VI”,并连入与图像相关的时间数据(字符串),以及由子VI“InitAVI.vi”创建的AVI文件路径。这样我们将获取的图像存入了相应的AVI文件中。我们获得的图像数据进行存储于显示后,为了下一次运行必须将相应的内存位置清空。所以我们将“ReadDataCam.vi”输出的三份图像数据,分别连入一个简单Case结构中的子VI“IMAQ Dispose VI”来清空相应位置的内存。在这里我们使用的Case结构:当为T值,清空三份图像数据内存;当为F值,清空三份图像数据内存,并将“IMAQ AVI Write Frame VI”的文件输出路径连入“IMAQ AVI Close VI”来关闭已写入图像的AVI文件。Case结构的条件端子我们会在后面提到。

17

图4.2 图像获取

在While循环中的另一部分是循环运行时间的记录与控制。我们利用两个时间计数器函数,一个放置在循环左端外,另一个放置与While循环内。将两个时间计数器通过减函数相减等到While循环的运行时间。由于While循环可能不止运行一次,我们需要在循环开始时对两个时间计数器进行同步。在循环内的时间计数器将计数值输入转换为双精度浮点数函数,输出的双精度浮点数与1000用除函数相除即将毫秒单位转化为秒单位,再将返回值连入名为“sync time(s)”的显示控件。在While循环外部的计时器将通过一个局部变量对“sync time(s)”进行读取操作,从而完成时间同步。我们将“sync time(s)”这个输出时间刻度用数值至数字字符串转换函数转换成字符串,再用搜索替换字符串用“.”来替换“,”。然后,利用连接字符串函数把搜索替换好的字符串、空字符串和行结束常量连接起来,这样做的目的是将每个时间刻度数值分行。最后,连接的字符串输入写入文本函数,文件路径来自在进入循环前就编写好的打开/替换/创建文件函数。写入文本后,该函数引用句柄输出连接循环右端索引隧道,连接循环外的关闭文件函数。在循环中的时间计数器输出的毫秒计时值还有另一个作用,连入数值至十进制数字符串转换函数转换为字符串型十进制数。该十进制数连入所介绍上一部分中的“IMAQ AVI Write Frame VI”作为数值信息,与获取图像一起写入AVI文件。

图表 4.3循环时间

该While循环第三部分是对循环运行次数与停止条件的编写。把循环变量i连入显示控件“Number of used frames”作为使用过的帧数。并将循环变量i与我们限定的帧数“Number of frames to acquire”通过比较函数“大于等于?”相

18

比较,比较函数的返回值接入非门。我们得到:用过帧数小于限定帧数,非门输出T值;用过的帧数大于等于限定帧数是,非门输出F值。该非门返回值一方面连入我们介绍第一个部分中Case结构的条件端子,即当用过的帧数大于等于限定帧数时,关闭AVI文件。非门返回值另一方面连接一个与门,与门另一个输入端来自于另一个非门。另一个非门输入连接在一个名为“stop”的停止按钮上,也就是说在触发“stop”按钮前,非门一直输出T值。与门的返回值连接在名为“measuring”的指示灯和While循环的条件端子(T值时继续)上。由于与门的逻辑特性“一非即非”,当两个非门任意一个返回值为F时,即用过的帧数大于等于限定帧数或者停止按钮触发时,与门会返回F值,指示灯“measuring”灭并且While循环停止。

该循环中还有一个小部分,通过获取队列引用函数和元素出队列函数将在子VI“ReadDataCam.vi”中调用的图像数据“Cam Image”引出,将图像数据连入名为“Image”的图像显示控件中,即我们获取的每一帧图像都会在前面板的图像显示屏中显示出来。

图4.4 图像获取的总帧数

4.2.3 图像获取结束

在While循环结束后还有一个小小的顺序结构,这个顺序结构只有一帧,连入该结构的也只有While循环的“error out”输出。在这个结构中,利用局部变量对“Run”值进行写入假常量。即当While循环结束后,布尔开关“Run”将关闭。

4.3 关闭USB摄像头

19

“InitAVI.vi”输出的AVI文件路径连入“SaveAVI.vi”来保存AVI文件,由“ReadDataCam.vi”USB摄像头路径连入“IMAQ USB Stop.vi”将USB摄像头停用进入待机状态,最后连入系统最末端的“IMAQ USB Close.vi”来在运行结束后关闭USB摄像头。

第五章 最终获取的图像介绍

5.1 前面板

在前面板中我们可以输入图像获取的帧数、AVI文件保存路径、图像叠加帧数等等的设置,并可以获得程序运行时间、图片内容等显示。

图表 5.1前面板

5.2 获取的图像

基于LabVIEW平台调用USB摄像头获取的图像存储在我们指定的AVI文件中。每份AVI文件图像帧率为每秒30帧,USB摄像头图像获取帧率也是每秒30帧。但实际上,程序运行速率并达不到每秒三十,也就是说必须对每一帧获取的图像进行时间刻度。在程序中,我们已将每一帧图像所对应的“sync time”以时间文本的形式写入AVI图像文件中。我们只需将其从AVI的图像数据中导

20

基于Labview的图像获取

4.2程序运行部分图像获取过程程序会有三个不同的事件分支,我们使用事件结构对不同情况进行图形语言编写。4.2.1事件结构的内容介绍在我们选用的层叠式结构中共有三个子程序框图分别是“Run”、“超时”和“Exit”。由于三个子程序的复杂情况各有不同,我们用倒叙从简单开始介绍。当“Exit”的值发生
推荐度:
点击下载文档文档为doc格式
0632z3dfxq6tck19hpxv8jj329nz7x003nj
领取福利

微信扫码领取福利

微信扫码分享