gpt4 book ai didi

performance - 如何在 LABVIEW 中快速将 U32 图像阵列解压为 RBG U8 阵列

转载 作者:行者123 更新时间:2023-12-04 02:50:02 25 4
gpt4 key购买 nike

我有一个扁平化 (1D) U32 编码图像数组,其中 r、b 和 b 8 位 channel 值编码到每个 U32 的前 24 位中。我想将此数组扩展为 U8 数组,每个数组存储一个单独的 r、g 或 b 值 (0-255)。问题是我需要这一切发生得非常快(在旧计算机上每秒数百次),而我创建的方法很慢。

我是 labview 的新手,所以我不确定哪种方法可以更快。

我通过创建一个 U8 数组、遍历 U32 图像数组的每个索引并使用移位寄存器将相应的 3 个 rgb 值分配给 U8 数组中的适当索引,成功地实现了这一点。我尝试使用 In Place Element Structure(这可能不需要像 shift 那样在循环之间复制数据),但我不知道如何让它在循环内工作,当我试图从循环中返回最后一个数组时,只修改了最后一个元素。

这是我上面描述的第一种工作方法:

dropbox VI image link (update i have reputation now)

在 c/c++ 中,它会非常简单(像这样):


uint8_t* convert_img(uint32_t img[640*480]){
uint8_t *img_u8 = new uint8_t[640*480*3];
for (int i=0; i<640*480; ++i){
img_u8[i*3] = img[i] & 0xff; // r
img_u8[i*3 + 1] = (img[i] >> 8) & 0xff; // g
img_u8[i*3 + 2] = (img[i] >> 16) & 0xff; // b
}
return img_u8;
}

上面的工作 labview 示例仅以 20 Hz 运行!我认为对于这样一个简单的操作来说,这太慢了。有没有经验丰富的人建议我如何使用 labview 代码快速实现这一目标?

最佳答案

我会这样做:U32到U8

enter image description here

步骤是:

  • Flatten To String - endian 选择字节的顺序
  • 将字符串展开 - 变成一维 U8 数组
  • 抽取一维数组 - 创建 4 个一维数组
  • reshape 数组 - 变成 640x480 数组

应该足够快了。

关于performance - 如何在 LABVIEW 中快速将 U32 图像阵列解压为 RBG U8 阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57641517/

25 4 0