LabVIEW中IMAQ内存分配 点击:336 | 回复:0



fjczd

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:552帖 | 36回
  • 年度积分:703
  • 历史总积分:1294
  • 注册:2008年8月14日
发表于:2022-10-15 19:37:52
楼主

LabVIEW中IMAQ内存分配

IMAQ用VI创建一个指针,该指针指向长度为零的未初始化IMAQ缓冲区。图像采集的实际内存分配由IMAQ配置缓冲区VI完成。在IMAQ初始化VI配置之后,在采集图像之前,应在低级编程中调用该VI。IMAQ配置缓冲区VI根据配置和相机格式调整IMAQ缓冲区的大小。如果使用的是高级IMAQ调用(IMAQ快照、IMAQ抓取设置或IMAQ序列),则会在内部调用IMAQ配置缓冲区VI。IMAQ读取文件VI的内部也进行了缓冲区配置。

LabVIEW中的图像参考数据类型包含一个指向LabVIEW内部结构的指针,而不是指向缓冲器本身的指针。为了获得实际的缓冲区,IMAQ获取图像像素点VI将指针返回到图像内存位置。图像从左上角到右下角存储在内存中。

例如,列0和行0引用的像素是图像左上角的像素。获取图像像素6的联机帮助包含有关如何在内存中组织图像数据的其他信息。此VI返回正确访问图像数据所需的所有信息(例如,如果您需要将图像传递给DLL)。

缓冲区分配实际上完全由操作系统管理。虽然可以保证单个缓冲区将具有连续的内存块,但不知道相应的缓冲区在内存中的位置。但是,这些缓冲区在缓冲区列表中的相对位置对访问映像没有性能影响,因为固态RAM可以在相同的时间内访问任何物理地址

 

使用 For 循环构建了一个 IMAQ 映像数组,但是当尝试查看该数组时,所有映像都是相同的。代码如下图所示。

IMAQ Create 在内存中创建一个空间来存储图像,并在内存中输出对该空间的引用。对该图像引用的任何操作实际上都会替换引用的图像,而不是创建一个新图像。创建的图像数组只是一个引用数组,它们都指向同一位置。

若要解决此问题,应创建与预期图像数一样多的引用。最简单的方法是将 IMAQ创建移动到 For 循环中。确保为每个图像指定不同的名称。

 

需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目问题,可联系我们。





楼主最近还看过


热门招聘
相关主题

官方公众号

智造工程师