在 LabVIEW 开发过程中,经常会遇到需要在不同 VI 之间传递图像数据的情况。比如在一些机器视觉检测系统中,子 VI 负责图像采集,主程序需要实时显示采集到的图像。同时,在实践中我们发现,采用共享变量或队列等常规数据传递方式来传递图像时,会出现图像闪烁问题 ,而在单个 VI 内显示图像却不会有此现象。那么,如何高效且稳定地在不同 VI 间传递图像呢?
共享变量在 LabVIEW 中常用于不同 VI 间的数据交互。但当用于传递图像时,由于其数据更新机制,会不断地重新读取和写入数据。而图像数据量通常较大,频繁的读写操作会导致显示时出现闪烁现象。例如在一个持续采集并显示图像的系统中,使用共享变量传递图像数据,随着采集的持续,闪烁会越来越明显,严重影响显示效果和系统的稳定性。
队列在 LabVIEW 中可用于多线程间的数据传递。然而在传递图像时,队列的入队和出队操作,以及数据在队列中的等待和传输过程,可能会导致图像数据的不连续或延迟。这使得在不同 VI 间显示图像时,出现闪烁或者卡顿的情况。比如在一个图像采集与处理的双 VI 系统中,采集 VI 将图像数据放入队列,处理 VI 从队列中取出数据显示,实际运行中会发现图像显示不稳定,存在闪烁问题。
NI VISION 是 LabVIEW 中用于机器视觉处理的重要工具包。其独特之处在于,图像数据是存储在内存的地址引用中。这就为不同 VI 间传递图像提供了一种简便且高效的方式:只要在不同的 VI 中调用相同名称的内存引用,就可以显示该内存地址中的图像内容。
这种基于 NI VISION 内存引用的图像传递方式,避免了共享变量和队列传递图像时的弊端。由于不同 VI 都是直接从相同的内存地址引用图像数据,不存在数据重复读写或在队列中等待传输导致的不连续问题。因此,能够实现图像在不同 VI 间的稳定、无闪烁显示。在实际的机器视觉项目,如产品外观检测、缺陷识别等应用中,这种方式能够确保操作人员清晰、稳定地观察到采集的图像,为后续的图像处理和分析提供可靠的基础。
在 LabVIEW 中进行不同 VI 间的图像传递时,基于 NI VISION 内存引用的方法是一种行之有效的解决方案。它克服了共享变量和队列传递图像时出现的闪烁问题,为 LabVIEW 机器视觉相关项目的开发提供了稳定、高效的图像传递途径。工程师在实际项目开发中,可根据项目需求合理选择图像传递方式,以提升系统的整体性能和用户体验。
楼主最近还看过