LabVIEW下处理IMAQ图像时可以使用Queue VIs吗
问题: 若要让其他位置的VI处理采集的图像,可以利用Queue VIs来做数据传递吗?
解答: Queues VIs不建议搭配IMAQ数据数据类型来作使用。 使用'IMAQ Create.VI'所创造出来的IMAQ图像数据型态并不是真正的图像数据,而是一个指向数据储存位置的指针。因此使用queue搭配IMAQ图像数据型态时,实际上传递的参数是内存位置而不是图像本身的资料。因此若采集到一个新的图像资料,由于传递的是图像地址,所以实际上新的图像并没有被传递。 较恰当的方法是定点作图像处理或是将图像资料复制到另一个不会变动或丢弃的内存缓冲区。
相关资料说明NI-IMAQ Memory Allocation
IMAQ创建VI会创建一个指针,指向长度为零的未初始化IMAQ缓冲区。图像采集的实际内存分配由IMAQ配置缓冲区VI完成。在IMAQ Init VI配置之后和获取图像之前,应在低级编程中调用此VI。IMAQ配置缓冲区VI 根据配置和相机格式调整IMAQ缓冲区的大小。如果使用的是高级IMAQ调用(IMAQ快照、IMAQ抓取设置或IMAQ序列),则会在内部调用IMAQ配置缓冲区VI。缓冲区配置也在内部完成,用于IMAQ读取文件VI。
LabVIEW中的图像参考数据类型包含一个指向内部LabVIEW结构的指针,而不是指向缓冲器本身。为了获取实际的缓冲区,IMAQ GetImagePixelPtr VI返回指向图像内存位置的指针。图像从左上角到右下角存储在内存中。
例如,第0列和第0行引用的像素是图像左上角的像素。GetImagePixelPtr VI的联机帮助包含有关如何在内存中组织图像数据的其他信息。此VI返回正确访问图像数据所需的所有信息(例如,如果需要将图像传递给DLL)。
缓冲区分配实际上完全由操作系统管理。尽管可以保证单个缓冲区将具有连续的内存块,但不知道相应的缓冲区在内存中的位置。但是,这些缓冲区在缓冲区列表中的相对位置对访问图像没有性能影响,因为固态 RAM 可以在相同的时间内访问任何物理地址。
需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。
设备有通讯协议,根据协议开发了LabVIEW程序,如下附件所示。
楼主最近还看过