LabVIEW中图像显示错误

简介: LabVIEW中图像显示错误

如果出现这种现象时候没有收到任何的错误提示,那么原因很可能是出现了竞争情况。LabVIEW中的图像数据类型有点不同于普通数据类型,因此我们需要简单了解一下图像数据类型的内容来帮助我们解决这个问题。


因为图像通常包含了大量的数据,因此图像采集NI-IMAQ的驱动和API需要你创建一个内存缓冲区来传递图像数据,这是通过IMAQ Create VI完成的


Image Name必须是唯一的,它代表了此特定内存的名字,这块内存将会被写入或者覆盖多次而不会产生新的内存分配。New Image简单的就是一个对该物理内存的引用,用以储存该图像。


很多的图像处理VI有多个图像输入,通常来说Image Src 和 Image Dst是图像输入接口,而Image Dst Out是输出接口,可以参考下面的IMAQ Threshold VI。


如果Image Src有连线,而Image Dst没有连线,则Image Dst Out会指向Image Src的内存缓冲区,而如果两个输入接口都连线了,Image Dst Out会指向Image Dst的内存缓冲区。

编程人员需要特别注意,因为一旦你没有为每个输入初始化足够的内存缓存区,可能就会造成对已经有的内存进行覆盖。如果你想在每个图像处理步骤中都保存对应图像,就可能会出现上述的问题。

请考虑以下示例:


上例中只有一个内存缓冲区。Image Display 2毫无疑问会显示图片2;但是取决于执行的顺序,Image Display 1则有可能显示图片1或者图片2。如果Display 1在IMAQ Threshold调用前完成刷新则显示图片1,否则将显示图片2。现在来看第二个例子:

本例中有两个内存缓冲区,一个是原始图像,一个是阈值化后的图像。现在ImageDisplay 1将会显示图像1,因为它引用了Image1的图像数据缓存,Image Display 2则会显示经过二值化处理后的图片2,因为它引用了Image Dest的图像数据缓存。


很多IMAQ 和Vision VI都有类似Source 和Destination的输入接口。其工作原理是:一旦Destination的输入接口没有连线,VI就会将结果图像数据覆盖输入的图像数据;而一旦Destination的输入接口连线,结果图像数据就会放到Destination指定的内存缓冲区中,同时保留Source指定的内存缓冲区中的输入图像数据。


对于所有创建的图像内存缓冲区,IMAQ Dispose VI用以释放由IMAQ Create VI创建的内存数据。


IMAQ Dispose VI应当在图像不再需要时调用。例如当一副图像从子VI中传递到主VI,此时若在子VI中调用了IMAQDispose VI将会释放该图像数据,那么主VI就无法获取图像的内存数据。这样该图像就无法再被处理或者显示了。

相关文章
|
5月前
|
存储 编解码 缓存
LabVIEW 控制 Tucsen 相机
LabVIEW 控制 Tucsen 相机
81 1
|
7月前
LabVIEW更改图像特定部分的颜色
LabVIEW更改图像特定部分的颜色
64 4
|
7月前
LabVIEW中忽略特定错误
LabVIEW中忽略特定错误
65 0
|
5月前
|
算法 测试技术 计算机视觉
LabVIEW自动探头外观检测
LabVIEW自动探头外观检测
23 1
|
5月前
|
数据采集 存储 测试技术
使用LabVIEW和示波器测试IGBT参数
使用LabVIEW和示波器测试IGBT参数
54 0
|
7月前
|
存储
46.编写程序在屏幕上显示如下图形
46.编写程序在屏幕上显示如下图形
50 2
|
7月前
|
文字识别 算法 机器人
LabVIEW利用相机开发零件处理和检查系统
LabVIEW利用相机开发零件处理和检查系统
37 4
|
7月前
|
编解码 Windows
LabVIEW程序框图进行缩放
LabVIEW程序框图进行缩放
215 1
|
7月前
|
算法 图形学
LabVIEW程序框图保存为图像
LabVIEW程序框图保存为图像
78 1
|
7月前
LabVIEW背景颜色设为和其他程序或图像中一样
LabVIEW背景颜色设为和其他程序或图像中一样
63 2