在嵌入式系统中由于摄像头彩集出来的数据一般会采用YUV的格式,但是framebuffer一般只接收RGB的数据,因此需要YUV到RGB颜色空间的转换。
YUV到RGB的转换思路一般是提到Y,U,V分量按照标准的转换矩阵进行换算,以YUV422I(排列方式为uyvy...序列)为例:
//输入YUV422I buffer数据,输出RGB buffer数据;
static int UYVY422ToRGB888(const unsigned char *src_buffer, int w, int h, const unsigned char *des_buffer)
{
unsigned char *yuv, *rgb;
unsigned char u, v, y1, y2;
yuv = src_buffer;
rgb = des_buffer;
if (yuv == NULL || rgb == NULL)
{
printf ("error: input data null!\n");
return -1;
}
int size = w * h;
for(int i = 0; i < size; i += 2)
{
y1 = yuv[2*i + 1];
y2 = yuv[2*i + 3];
u = yuv[2*i];
v = yuv[2*i + 2];
#if 0
rgb[3*i] = (unsigned char)(y1 + 1.402*(u - 128));
rgb[3*i + 1] = (unsigned char)(y1 - 0.344*(u - 128) - 0.714*(v - 128));
rgb[3*i + 2] = (