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更改图像特定部分的颜色
LabVIEW更改图像特定部分的颜色
17 4
|
5天前
LabVIEW中忽略特定错误
LabVIEW中忽略特定错误
12 0
|
5天前
|
算法
LabVIEW在同一个面板下描绘模拟波形和数字波形
LabVIEW在同一个面板下描绘模拟波形和数字波形
12 0
|
5天前
|
数据格式
LabVIEW编程LabVIEW控制JJ天平例程与相关资料
LabVIEW编程LabVIEW控制JJ天平例程与相关资料
18 1
|
5天前
|
存储 索引
LabVIEW中的波形图和波形图表有什么区别在LabVIEW中更改波形图表的历史长度
LabVIEW中的波形图和波形图表有什么区别在LabVIEW中更改波形图表的历史长度
10 2
|
5天前
|
算法 图形学
LabVIEW程序框图保存为图像
LabVIEW程序框图保存为图像
16 1
|
5天前
|
编解码 算法 图形学
LabVIEW中调整图像大小
LabVIEW中调整图像大小
10 0
|
5天前
|
编解码 Windows
LabVIEW程序框图进行缩放
LabVIEW程序框图进行缩放
13 1
|
5天前
|
算法
LabVIEW开发圆形分子识别的方法与例程
LabVIEW开发圆形分子识别的方法与例程
11 1
|
5天前
LabVIEW背景颜色设为和其他程序或图像中一样
LabVIEW背景颜色设为和其他程序或图像中一样
12 2
http://www.vxiaotou.com