Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何在LABVIEW中将U32图像阵列快速解包为RBG U8阵列_Performance_Loops_Indexing_Labview_Shift Register - Fatal编程技术网

Performance 如何在LABVIEW中将U32图像阵列快速解包为RBG U8阵列

Performance 如何在LABVIEW中将U32图像阵列快速解包为RBG U8阵列,performance,loops,indexing,labview,shift-register,Performance,Loops,Indexing,Labview,Shift Register,我有一个扁平(1D)U32编码图像阵列,其中r、b和b 8位通道值编码到每个U32的前24位。我想将此数组扩展为和U8数组,每个U8存储一个单独的r、g或b值(0-255)。问题是,我需要这种情况很快发生(在旧计算机上每秒数百次),而我创建的方法很慢 我是labview的新手,所以我不确定什么是更快的方法 通过创建一个U8数组,迭代U32图像数组的每个索引,并使用移位寄存器将相应的3个rgb值分配给U8数组中的相应索引,我成功地实现了这一点。我尝试使用就地元素结构(这可能不需要在循环之间复制数据

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

我是labview的新手,所以我不确定什么是更快的方法

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

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

在c/c++中,这将非常简单(类似于这样):


uint8*convert\U img(uint32\U t img[640*480]){
uint8_t*img_u8=新uint8_t[640*480*3];
对于(int i=0;i>8)&0xff;//g
img_u8[i*3+2]=(img[i]>>16)&0xff;//b
}
返回img_u8;
}
上面的工作labview示例仅以20 Hz的频率运行!我觉得这样简单的操作速度太慢了。有经验的人对我如何使用labview代码快速实现这一点有什么建议吗?

我会这样做: U32至U8

这些步骤是:

  • 展平到字符串-endian选择字节的顺序
  • 从字符串展开-放入1D U8数组
  • 抽取1D阵列-创建4个1D阵列
  • 重塑阵列形状-变为640x480阵列

应该足够快。

我希望最快的选项是使用Split Number原语将U32拆分为U8,但您需要实际测试:


还要注意的是,测试性能并不像您想象的那么容易,尽管如果您考虑总体速率,您可能对基本测试没有意见。

谢谢!这要快得多。这种方法甚至比展平到1D u32数组>类型转换到uint8数组更快。是的,比我的方法好得多,我不知道为什么我没有想到它!