LabVIEW Vision-IMAQ Clear Overlay清除覆盖
很多时候我们在调试时,可能会Overlay许多的信息在图像上,但是有时候,这些覆盖又比较碍事,所以就得清除这些覆盖。这时就需要使用一个叫IMAQ Clear Overlay清除覆盖的函数。清除覆盖函数的功能就是将前面覆盖在图像上的所有覆盖都清除掉,还原原始的干净图像。下面来看一下IMAQ Clear Overlay清除覆盖函数的具体用法。
覆盖直线的图像
在覆盖了直线的图像上继续覆盖直线
从上面的效果上可以看到,如果只采集一次图像,然后覆盖不同的位置的直线时,其都会显示在图像上,并不清除掉以前的历史覆盖。这种情况,如果图像处理的函数比较多,覆盖的内容也比较多的话,则会使图像变成非常乱,因此我们需要清除覆盖。清除覆盖其实有两种方法,一种是重新采集图像,新的图像进入图像缓存后,原来的覆盖都将被清除掉。另一种,则是使用Clear Overlay清除覆盖函数,人为的清除掉已经覆盖的东西。
执行清除覆盖后的效果
重新采集后的效果-也没有覆盖
下面来看一下程序框图:
采集图像事件结构
停止事件结构
覆盖直线事件结构
清除覆盖事件结构
本程序框图,使用的是比前面覆盖函数演示示例中的略复杂一点的事件结构。本程序共有四个事件分支,分别响应采集图像、覆盖直线、清除覆盖、停止四个布尔按钮的值改变事件。因为要查看清除覆盖的效果,就必须使用同一图像,所以没有使用自动的连续采集图像,因为那样采集新图像后,会自动将原来的覆盖清除。所以这里是使用事件手动采集图像的。至于函数则是非常好理解的,在前的章节中,都有类似的应用。停止事件是用于结束程序的,这个也没有太多介绍的。覆盖直线事件结构中,覆盖直线在章节“LabVIEW Vision之Overlay-Line覆盖线http://labviewvision.com/thread-9446-1-1.html”中已经介绍过,要了解其具体使用,请查看其介绍。
这里需要注意一下的是,Image Display图像显示控件的接线端在采集图像中,这里图像如果有变化时是可以实时显示的。而在覆盖直线函数中,则只能利用局部变量来赋值,这样也可以在原来的图像上实时显示覆盖的效果。如果另外再弄一个图像显示控件,则不同很合适也不合理。同理,在清除覆盖中,也使用局部变量。这样可以在同一个图像显示控件中查看覆盖有无情况。
清除覆盖事件分支,调用了IMAQ Clear Overlay清除覆盖函数。这个函数的调用其实非常简单,只需要连接Image必须控件即可正常调用。其它的接线端,如组、错误输入、图像输出、错误输出等,可根据情况选择是否连接。这里如果Image Out不连接到Image Display中,则清除效果无法直观的查看,所以这里还是建议连接的。
IMAQ Clear Overlay清除覆盖函数位置
IMAQ Clear Overlay清除覆盖函数
程序框图中,While循环中的图像缓存使用了移位寄存器,这个在一般的LabVIEW编程中,都是需要考虑这样使用,因为采集图像后的图像还需要应用到覆盖、清除覆盖中。所以根据LabVIEW的编程思想,是应该使用移位寄存器的。但是对于图像缓存,因为其本身就是共享使用的,如果没有另外的缓存分配,那么无论哪个步骤,都是使用同一缓存地址中的数据,且新的数据将覆盖掉原来的数据。因此,这里不用移位寄存器也是可以正常使用的。
将移位寄存器替换为普通的隧道-采集图像并多次覆盖效果
将移位寄存器替换为普通的隧道-采集图像并多次覆盖后再执行清除覆盖效果