如何将uint8数组转为480×640的uint16格式相机帧数组?
解决方案
你可以通过numpy的view方法直接将连续的两个uint8字节解释为一个uint16元素,再调整形状到目标维度,具体代码如下:
import numpy as np # 读取原始字节数组 raw = np.asarray(d.GetFrameData(), dtype=np.uint8) # 1. 将uint8数组按uint16类型解析(每2字节合并为1个16位像素值) # 注意:字节序需匹配相机输出,<u2为小端,>u2为大端,按需调整 frame_16bit = raw.view(dtype=np.uint16) # 2. 调整形状为目标的(640, 480) frame_final = frame_16bit.reshape((640, 480)) # 验证结果 print(frame_final.shape, frame_final.dtype) # 预期输出:(640, 480) uint16
关键细节说明:
- 用
view而非astype:astype会把单个uint8值单独转换为uint16(比如255→255),无法实现两字节合并;view是直接重新解释内存字节组合,正好满足16位像素的生成需求。 - 字节序适配:如果转换后像素值异常(如全0或数值错乱),需切换字节序参数(
'<u2'或'>u2'),这取决于相机的16位数据存储格式。 - 维度顺序调整:若最终数组显示的画面旋转/颠倒,可尝试先reshape为
(480, 640)再转置frame_final.T,适配相机帧的存储顺序。
内容的提问来源于stack exchange,提问作者Edward Pang
相关产品推荐
相关产品推荐

