使用或不使用 NI Vision 从二进制缓冲区/文件创建 LabVIEW IMAQ 图像

问题描述 投票:0回答:1

假设您有一个表示二维图像的二进制缓冲区或文件。

如何使用 LabVIEW 将二进制数据转换为 IMAQ 图像以便进一步处理?

image computer-vision labview
1个回答
1
投票

使用 NI 视觉

对于安装了 NI 视觉库的 LabVIEW 用户,有一些 VI 允许从 2D 数组复制 IMAQ 图像的图像数据。

对于单通道图像(

U8

U16
I16
float
),VI 为

Vision and Motion >> Vision Utilites >> Pixel Manipulation >> IMAQ ArrayToImage.vi


对于多通道图像(

RGB

等),VI是

Vision and Motion >> Vision Utilites >> Color Utilities >> IMAQ ArrayColorToImage.vi


示例1

下面的代码片段显示了使用

IMAQ ArrayToImage.vi

 的示例,其中从二进制文件读取 
U16
 数据并将其写入灰度 
U16
 类型 
IMAQ image
。请注意,如果该文件是由 LabVIEW 以外的其他软件创建的,则可能必须以为 
Read From Binary File.vi
 指定的小端格式读取

LabVIEW Code to set the IMAQ Image data from a data buffer with NI Vision

示例2

当使用某些驱动程序 DLL 调用来获取图像数据作为缓冲区时,可以使用类似的过程。例如,如果驱动程序具有函数

capture(unsigned short * buffer)

,则可以采用以下技术,在使用 
initialize array
 原语调用函数之前初始化正确大小的数组。

LabVIEW Code to set the IMAQ Image data from library call with NI Vision

// example function which fills a buffer with image data #include <stdint.h> __declspec(dllexport) int capture(uint16_t * buffer) { int width,height; width = 2500; height = 3052; // check pointer if(!buffer){ return -1; } // fill buffer with some data for testing // this should be a greyscale gradient // black in the top left corner // to white in the bottom left for(int row = 0; row<height;row++){ for(int pixel=0; pixel<width; pixel++){ *buffer = row * 8 + pixel * 8; buffer++; } } return 0; }

没有 NI Vision

对于未安装 NI Vision 的 LabVIEW 用户

,我们可以使用名为 GetImagePixelPtr.vi 的 VI,它与 NI-IMAQ 工具包/库一起安装。该VI可能在调色板中不可见,但应该位于磁盘上的

<LabVIEW-Install-Directory>\vi.lib\vision\Basics.llb
中。
此外,我们将使用来自 

LabVIEW 内存管理器库的

MoveBlock

 共享库调用
这些 VI/库调用可以如下面的代码片段所示使用,其中,如前面的代码片段所示,

U16

数据从二进制文件读取并写入灰度 U16 类型 IMAQ 图像。

LabVIEW Code to set the IMAQ Image data from a data buffer without NI Vision 一旦我们获得了 2D 数组形式的图像数据,我们需要通过设置其尺寸来准备 IMAQ 图像。然后使用 for 循环迭代图像数据的行;对于每一行,我们获得一个指向相应 IMAQ Image 行开头的指针,并使用 MoveBlock 调用来复制数据。每次调用 MoveBlock 后,我们都会取消映射 IMAQ 图像指针以进行整理。

请注意,本示例使用U16数据;对于其他数据类型,请确保相应更新

bytes per pixels

数值常量(在 for 循环中)。

    

© www.soinside.com 2019 - 2024. All rights reserved.