如何将相机获取的一维RGB565数组转换为3D RGB图像(优先使用PIL)
PIL快速实现RGB565一维数组转QVGA 3D RGB图像
你要的转换完全可以用PIL内置的原生解码器实现,全程走C层逻辑,没有Python层循环开销,是目前Python环境下速度最快的方案,完全适配你提到的320×240分辨率、153600字节长度的RGB565一维数组场景。
核心实现代码
from PIL import Image import numpy as np # 入参raw_rgb565_buf为相机输出的一维RGB565格式字节数组 def convert_rgb565_to_qvga(raw_rgb565_buf): # 直接从原始字节流解析16位RGB565数据 pil_img = Image.frombuffer( mode="RGB;16", size=(320, 240), data=raw_rgb565_buf, decoder_name="raw", args=("BGR;16", 0, 1) ) # 转标准24位RGB格式 pil_img = pil_img.convert("RGB") # 如需获取形状为(240, 320, 3)的3D RGB数组(通道顺序R/G/B,值范围0-255),执行下面这行即可 rgb_3d_array = np.asarray(pil_img) return pil_img, rgb_3d_array
关键说明
- 代码里
args的第一个参数如果运行后出现红蓝通道错位、颜色偏蓝/偏红的问题,把"BGR;16"替换为"RGB;16"即可,这个差异来自相机端输出RGB565数据的大小端配置,调整单个参数就能适配,不需要修改其他逻辑。 - 不要使用逐像素位运算拆分R/G/B通道的手写实现,这类纯Python循环的处理速度比PIL原生解码器慢10~100倍,完全没有必要。
- 如果你不需要做numpy层面的数组运算,直接拿到返回的
pil_img对象就可以直接做保存、绘图、视觉推理等后续操作,不需要额外转格式。
内容的提问来源于stack exchange,提问作者Michael Papageorge
相关产品推荐
相关产品推荐

