LabVIEW Vision之Overlay Multiple Lines覆盖多段线
在NI LabVIEW做图像处理时,经常要用到覆盖Overlay功能,将一些目标信息标示在图像上,如目标点、直边、圆、结果等。本文介绍的是Overlay中的覆盖多段线函数。覆盖多段线功能,其作用是在图像上显示多条首尾相连的直线,主要是用于显示一些有多线特征输出的函数,如匹配结果、粒子分析等函数等,或者是画一些特殊的多边形,如三角形、平行四边形、五边形等。
IMAQ Overlay Multiple Lines2函数位置
NI LabVIEW VISION中的覆盖Overlay函数位于编程>函数>视觉与运动>Vision Utilities>Overlay,本节介绍的Overlay Multiple Lines覆盖多段线函数,是第一排第三个函数IMAQ Overlay Multiple Lines 2。
IMAQ Overlay Multiple Lines 2覆盖多段线函数功能与接线端
覆盖多段线函数,和覆盖线函数一样,可以适用所有NI支持的图像类型,灰度图、彩色图、8位图、16位图等等,都是可以的。在使用覆盖多段函数时,还应该注意一下,这个函数在2013版(或更早的版本中)已经默认更新到IMAQ Overlay Multiple Lines 2了,另外还有一个隐藏的IMAQ Overlay Multiple Lines函数,两个覆盖多段线函数略有点区别。
旧的IMAQ Overlay Multiple Lines函数
这个函数在安装新版的NI Vision时,是有带的,只是在程序选项板中找不到,可以先找开IMAQ Overlay Multiple Lines2函数,然后将对这个函数进行另存为,可以查看到这个函数的路径:
IMAQ Overlay Multiple Lines2函数保存路径
可以看到IMAQ Overlay Multiple Lines 2函数保存在C:Program Files (x86)National InstrumentsLabVIEW 2014i.libisionOverlay.llb库文件下。打开这个Overlay.llb库文件,就可以看到其中有旧的IMAQ Overlay Multiple Lines函数:
旧的IMAQ Overlay Multiple Lines函数位置
下面来看一下其引脚的具体说明,以新的IMAQ Overlay Multiple Lines2函数为准。
Group specifies the group to which you want to add the overlay information. If no name is specified, the overlay information is added to the default group.
组:指定你想添加的覆盖信息属于哪个组。如果没有指定名称,则覆盖的信息添加到默认的组中。覆盖信息可以分组,有可能有许多的覆盖信息,所以如果有必要,则可以对相应的覆盖信息进行分组,不过一般情况下,都不使用分组功能,这里不连接使用默认值即可。
Image is a reference to the source image.
图像:这个是图像的引用。用于连接需要覆盖的图像上。一个图像处理程序中,可能有许多的图像缓存引用,这时可能每个覆盖信息是覆盖在不同的图像上,因此要注意Image接线端连接到哪个缓存引用上。
Line End Points is an array of the point-coordinate clusters defining the ends of the lines to overlay.
线终点:是需要覆盖在图像上的多段线的终点,其中的点使用簇表示,然后再由数组来整合。数组中的每个点,则为多段线上的一个折点。
Drawing Mode (Frame) specifies whether to draw only the frame of the polygon or fill in the polygon. The default value is Frame.
绘图模式:指定绘制的多边形是否仅画框架或者是填充整个多边形。默认值为Frame框架。在新的2版函数中,这个绘图模式经过验证,NI VISION不支持Fill模式,只能使用Frame框架模式,有可能是Bug,也可能是功能限制。如果使用Fill模式,则会报错:
错误-1074395325发生于 IMAQ Overlay Lines,可能原因IMAQ Vision: NI Vision does not support the DrawMode value you supplied.
如果要使用Fill模式填充,则考虑使用旧版的函数,旧版的函数经验证是可以使用Fill模式的。
Color is the color of the overlay. Note The alpha color channel is not supported. Setting the Color to transparent has the same effect as selecting black.
颜色:即覆盖信息的颜色。可以使用颜色盒直接选择。注意一点的是,覆盖的颜色不能使用阿尔发颜色通道。如果设置颜色为透明,则和设置黑色的效果是一样。
error in (no error) describes the error status before this VI or function runs.
错误输入,没太多介绍的,基本上NI LabVIEW函数,都有错误输入与输出。
Image Out is a reference to the destination image.
Maintain Width? specifies whether you want the overlay measured in screen pixels or image pixels. Overlays measured in screen pixels maintain the same width as you zoom in on the image. Overlays measured in image pixels will scale with the image and appear to increase in width as you zoom in on the image. Set this value to TRUE if you want the overlay measured in screen pixels. Set this value to FALSE (default) if you want the overlay measured in image pixels.
保持宽度:指定是以屏幕像素还是以图像像素来覆盖测量。如果以屏幕像素来覆盖测量,则当你缩放图像时线宽保持不变,始终为屏幕的一像素。而如果以图像像素来覆盖测量,则当图像放大时,覆盖的线宽也会随着像素的变大而变宽,始终占一个图像像素的宽度,而如果图像像素宽度小于屏幕像素时,则显示一个屏幕像素的宽度。如果你要使用屏幕像素,则设置为真,如果要使用图像像素显示时,则设置为假(为默认值)。
Width specifies the width of the overlay in pixels.
宽度:指定覆盖的线的宽度。即覆盖的线以多少个像素来表示。这个选项与保持宽度共同作用覆盖的线宽。
图像输出:已经覆盖信息后的图像引用输出。这里的图像输出,是已经覆盖了信息后的图像。因此,如果使用Image Display显示控件连接,如果连接在覆盖点函数前,则是没有覆盖的,而连接在覆盖点函数后,则是有覆盖的。当然如果在同个帧图像中进行显示,因为其时间非常快,可能看不出这种变化。
error out contains error information.
错误输出:与错误输入相同,基本上所有函数都包含了这样接线端。
下面来看一下其具体使用方法:
覆盖多段线效果
采集图像并覆盖多段线程序框图
线宽设置为1,保持线宽(屏幕像素)
线宽设置为1,不保持线宽(图像像素)
可以看到,当图像放大时,保持线宽,则始终以屏幕的像素为准,显示的细弱细。而图像像素则比较宽。
线宽设置为5,不保持线宽(图像像素)
线宽设置为5,保持线宽(屏幕像素)
设置线宽为5后,其差别则更大。
绘图模式如果使用Fill模式,则报错,不能正常显示覆盖
旧的IMAQ Overlay Multiple Lines函数相对于新的旧的IMAQ Overlay Multiple Lines 2函数而言,则少了保持线宽和宽度两个参数。因此其不能设置覆盖线的宽度。其宽度默认是使用图像像素的,因此当图像变大时,线宽也相应的变大。
IMAQ Overlay Multiple Lines函数程序框图
IMAQ Overlay Multiple Lines函数效果
IMAQ Overlay Multiple Lines函数放大效果
IMAQ Overlay Multiple Lines函数Fill绘图模式效果
从上图可以看到,使用Fill绘图模式,会对图像进行闭合填充。填充的颜色与线形的颜色是一样的。这里使用Fill模式时,如果Line End Points中的点首尾是重合的,如上图为(100,100),本来就已经闭合的,则按照其组成的多边形自动闭合填充。而如果首尾的点不重合时,则会自动对首尾连线然后再填充,如下图所示:
尾点(50,50)与首点(100,100)自动连线并填充
这种填充方法,在绘制一些箭头、实心圆点、实心方块、在图像上显示OK、NG提示等,是比较有用的。