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

2023-12-22

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

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


借助 NI 视觉

对于 LabVIEW 用户已安装 NI 视觉库的人,有一些 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 type IMAQ image。请注意,如果该文件是由 LabVIEW 以外的其他软件创建的,那么很可能必须以小端格式读取该文件,该格式是为Read From Binary File.vi

实施例2

当使用某些驱动程序 DLL 调用来获取图像数据作为缓冲区时,可以使用类似的过程。例如,如果驱动程序有一个功能capture(unsigned short * buffer)那么可以采用以下技术,在函数调用之前使用以下方法初始化正确大小的数组:initialize array原始。

// 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 视觉

对于 LabVIEW 用户没有安装 NI Vision 的人,我们可以使用一个名为GetImagePixelPtr.vi它与 NI-IMAQ 工具包/库一起安装。该VI可能在调色板中不可见,但应位于磁盘上<LabVIEW-Install-Directory>\vi.lib\vision\Basics.llb.

此外,我们将使用MoveBlock共享库调用来自LabVIEW 的内存管理器库 https://zone.ni.com/reference/en-XX/help/371361R-01/lvexcode/memory_manager_functions/

这些 VI/库调用可以如下面的代码片段所示使用,其中,如前面的代码片段所示,U16数据从二进制文件读取并写入灰度 U16 类型 IMAQ 图像。

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

请注意,本示例使用 U16 数据;对于其他数据类型,请确保bytes per pixels数值常量(在 for 循环中)会相应更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • GKE 出现错误:ImagePullBackOff 和错误:ErrImagePull 错误

    当 kubectl 应用 yaml 将自定义构建的 docker 映像部署到 GCP 中的集群 编辑掉敏感信息 时 我收到以下错误 已尝试以下但没有运气 手动部署镜像 检查以确保防火墙规则允许 443 并且没有任何东西阻止它 尝试将容器注册
  • 多视图几何

    我从相距一定距离的两台相同品牌的相机捕获了两张图像 捕获了相同的场景 我想计算两个相机之间的现实世界旋转和平移 为了实现这一点 我首先提取了两张图像的 SIFT 特征并进行匹配 我现在有基本矩阵也单应性矩阵 然而无法进一步进行 有很多混乱
  • 指纹奇异点检测

    我正在尝试确定指纹的核心点和增量点 我正在使用庞加莱指数方法 但我无法成功检测到这一点 而且我不明白为什么 First I divide the image in 15x15 blocks then I calculate the x an
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 如何在java中通过socket发送Image数据类型

    我真的很困惑如何通过套接字发送图像数据类型 请帮我 我已经搜索了如何将 Image 数据类型转换为 char 但结果是 0 Use ImageIO http docs oracle com javase 1 4 2 docs api jav
  • 在 Android 上将大位图文件的大小调整为缩放的输出文件

    我的文件中有一个大位图 例如 3888x2592 现在 我想将该位图大小调整为 800x533 并将其保存到另一个文件中 我通常会通过调用来缩放位图Bitmap createBitmap方法 但它需要一个源位图作为第一个参数 我无法提供它
  • 在 Swift 中将 gif 保存到 iOS 照片库

    我正在尝试保存位于已使用 Regift 代码创建的临时文件中的 GIF 图像 Regift https github com matthewpalmer Regift https github com matthewpalmer Regif
  • 如何使用 jquery imgAreaSelect 用 php 裁剪图像?

    我正在使用以下 javascript 代码来实例化 jquery图像区域选择 http odyniec net projects imgareaselect 裁剪我的图像 document ready function ladybug im
  • 预训练 inception v3 模型的层名称(tensorflow)[重复]

    这个问题在这里已经有答案了 任务是获取a的每层输出预训练的 cnn inceptionv3 https www tensorflow org versions master tutorials image recognition index
  • C# 代码上的 ImageURL 不显示图像

    我在 aspx 页面上有图像
  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • setImageCompressionQuality 与 setCompressionQuality 之间有什么区别 - Imagick

    我在Imagick中找到了两种设置图像压缩质量的方法 A 设置图像压缩质量 B 设置压缩质量 所以我想知道哪一个是最好的以及为什么在以下条件下 我读到了setCompressionQuality方法仅适用于新图像 我正在尝试压缩文件 jpe
  • 如何使网页中出现的图标闪烁/闪烁

    几天前我开始研究高级java 我知道太晚了 我被困在使图标 出现在任务栏上 闪烁的特定任务上 这种闪烁应该根据特定条件发生 这意味着可以使用以下方法来实现javascript 我已经搜索了一段时间了 但是有没有办法让图标每隔 1 秒左右出现
  • Oracle Blob 在 PHP 页面中作为 img src

    我有一个网站当前使用文件服务器上的图像 这些图像显示在页面上 用户可以根据需要拖放每个图像 这是使用 jQuery 完成的 图像包含在列表中 每张图片都非常标准 img src network path image png height 8
  • 在Android内存中存储gif图像

    我对安卓还很陌生 我想将图像保存到内存中 然后从内存中检索图像并将其加载到图像视图中 我已使用以下代码成功将图像存储在内存中 void saveImage String fileName img cnt jpg File file new
  • JavaFX:将像素写入 PixelWriter 的最快方法

    我正在寻找最快的方式来写入像素javafx scene image Image 写信给BufferedImage的后备数组要快得多 至少在我制作的测试图像上 只花了大约 20 毫秒BufferedImage WritableImage另一方
  • HTML5 仅拖放图像

    我想做的是 如果所有拖动的文件都是图像 则将其删除 但如果有其他文件扩展名 则不要删除它们 而仅删除图像 这是我的尝试 HTML div div JavaScript var dropzone document getElementById
  • Java .drawImage:如何“取消绘制”或删除图像?

    我需要在程序运行时不断在不同位置重绘某个图像 因此 我设置了一个 while 循环 该循环应该在屏幕上移动图像 但它只是一遍又一遍地重新绘制图像 我究竟做错了什么 有没有办法在将旧图像绘制到新位置之前删除旧图像 JFrame frame b
  • 将图像编码为base64有什么效果?

    如果我将图像 jpg 或 png 转换为 base64 那么它会更大 还是具有相同的大小 会大多少呢 是否建议在我的网站上使用 Base64 编码的图像 大约会大 37 非常粗略地说 Base64 编码的二进制数据的最终大小等于原始数据大小
  • 使用 PHP 中的 GD 库在图像上绘图

    我创建了一个代码来生成随机图案图像 它创建一个具有给定宽度和高度的图像 并用 40x40 像素的小矩形填充它 这是我的代码

随机推荐