配置OV5640摄像头后,通过千兆以太网传输到QT的上位机显示,有显示图像,但是图像颜色分量不正确。
现象: 输出格式为rgb565,上位机转成rgb888颜色分量不正确,只能显示黑白
原因:
大端小端存储
千兆以太网数据位数为8位,而rgb565数据总共为16位,我使用了一个union共享一片内存,存的时候是char类型,取的时候是quint16类型,这样就导致一个问题:
假如数据为0x01、0x02、0x03、0x04,按顺序存储,而读取的时候是0x0201、0x0403,这样提取rgb分量就会出错。
下图是0v5640的数据输出格式
解决这个问题以后,又发现颜色分量不准确,具体现象是红色显示成蓝色,蓝色显示成红色。怀疑是提取颜色分量出错。后来查ov5640技术手册,发现了原因。
- ov5640寄存器配置
ov5640数据输出格式是由0x4300寄存器配置决定的。
我给0x4300寄存器配置的是0x60,即输出应是{b[4:0],g[5:3]},{g[2:0],r[4:0]}。而我实际在提取RGB颜色分量时按照rgb顺序提取,导致红蓝颜色相反。