石鑫华视觉准备就NI的视觉例子为大家解说一下,这些例子,可以说是最简单,但是又是最基本最经典的应用,虽然从架构上来讲,不是很好,但是贵在容易理解。对于初学者来讲,是相当适合的。而且还能从其中了解到一些基本的应用与细节。
LabVIEW安装了VDM后,在NI范例查找器中,会在工具包和模块中添加视觉的范例,如图1所示:
视觉的范例,主要分为三个部分,一个是函数,主要是以函数的应用为主;入门,只有一个函数,即读取函数。而应用程序,则略微复杂一些。有一些,具有一定的实际应用参考价值。
本节内容,只针对入门中的读取文件例子来讲。这个例子,其实在作者其他的文章中,都或多或少地有所涉及。
双击ReadFile Example.vi打开读取文件例子VI,其前面板与后面板如下图2所示:
从中可以看到前面板其实非常简单,仅仅只是一个Image Control显示控件。这个应该都非常明白怎么弄的吧?什么,你还不明白怎么出来的?那好吧。仔细讲一下。
在前面上点鼠标右键》控件》Vision的第二个、第三个即是图像显示控件,如图3所示:
在这里,初学者,需要注意一下,Vision控件栏第一排三个都是Image引用控件。第一个是Image.ctl控件,这个控件仅能用于传递引用,是不能显示图像的。而且程序框图的所有函数,如果使用创建输入控件、显示控件时,默认创建的都是基于这个控件的引用,而不会有图像显示。如图4所示:
因此要想在前面板显示图像,是必须要在前面板,选择Vision中的第二个Image Display图像显示3D控件或第三个Image Display(Classic)图像显示(经典)控件放置在前面板,再在后面板相应的位置进行连线。如果同一图像引用有多个不同效果的处理,想要实时显示,需要对这个控件创建局部变量,连接到不同的处理过程中,这样在Image Display图像显示控件中才能正常显示处理后的图像。
再往回看图2,看一下程序框图。程序框图其实非常简单,一个平铺式的顺序结构。顺序结构在LV编程中,一般是不太主张的,但是在这里初学入门来讲,是非常实在的,可以明确的看到其工作的流程。顺序的第一帧中,先是打开图像,调用的是IMAQ Load Image Dialog加载图像对话框函数,这个函数与LV中的其它调用文件函数对话框类似。但是其包含了一个图像的预览框,可以对需要加载的图像进行预览及添加图像的基本信息。如图5所示:
加载完图像后,会传递图像的路径出来。接下来调用的函数是IMAQ GetFileInfo函数,获取图像类型。Vision中的函数,可以处理的图像类型不是完全一样的,有些函数只能处理彩色图像,有些函数只能接受8位的灰度图,有些呢,只能接受二值图像。因此在这里他首先获取图像的类型,这个类型可以为接下来的创建图像缓存时指定图像缓存的类型。不同的类型,使用的缓存不一样。获取了类型后,就是调用IMAQ Create函数,创建图像缓存引用。这个可以参考文章LVision:IMAQ Create创建图像缓存。再下来,就是读取图像函数IMAQ ReadFile,通过其读取加载图像输出的路径中的图像文件到创建缓存创建的缓存中。读取后,输出到Image(Display)中显示给用户。
顺序结构的第二帧,是IMAQ Dispose释放缓存及简易错误处理器。注意在这下面的解释说明Free Memory. The image control is in Snapshot mode, so the image displayed is not removed.其意思为释放内存。图像控件处于快照模式(参考文章LVision-Snapshot快照),因此显示的图像是不会被移除的。我们可以先显示即时帮助,然后在程序框图中的Image控件中点击右键,然后鼠标移动到创建》属性节点》Snapshot Mode,在即时帮助中可以看到其解释:The Image display control maintains a copy of the image wired to the control. This mode is not available for a control inside an array. LabVIEW RT does not support setting this property. 即图像显示控件保留了一幅连线到控件上的图像复本。这个模式不能用于数组中的控件。LV RT实时系统也不支持这个属性。所以,如果选择了快照模式,即使释放了图像缓存,也是不会清除图像显示控件中的图像的,因为他是复制了图像缓存中一个图像复本。而如果没有使用快照模式,那么释放图像缓存后,在图像显示控件中,将不会存在图像。
实际应用中,如果保留快照模式的图像复本,在保存VI后,VI会增加一幅图像的大小,例如500万级别的图像,那么VI可能会5M左右。而开启快照模式,对于一些需要快速显示的项目会比较友好,要覆盖显示的内容不会一闪一闪的。所以,一般可能Image控件需要在开启快照模式,而保存时,最好是没有图像进行保存。这样保存的VI就会小很多了。