主题 : yuv2rgb 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 53362
精华: 0
发帖: 110
金钱: 570 两
威望: 114 点
综合积分: 220 分
注册时间: 2011-08-06
最后登录: 2013-05-21
楼主  发表于: 2011-11-11 16:42

 yuv2rgb

我相信,这个世界上会有很多人使用YUYV格式的摄像头采集数据,,然后用RGB565的LCD显示,,但我为什么找不到一个YUYV->RGB565的转换程序啊,,求参考程序
(希望友善的管理员不要再删除我的提问了啊,,我已经有好多次提问没人理过,过两天就被删除了)
级别: 侠客
UID: 6350
精华: 2
发帖: 110
金钱: 895 两
威望: 486 点
综合积分: 260 分
注册时间: 2009-05-29
最后登录: 2016-10-11
1楼  发表于: 2011-11-12 11:17
#define  RGB(v) ({    \
    int value = (v); \
    (value > 0) * value | (255 * (value > 255));\
})

YUV444toRGB888 :
y = img[0];
u = img[1];
v = img[2];
r = RGB(y + v + (v >> 2) + (v >> 3) + (v >> 5));
g = RGB(y - ((u >> 2) + (u >> 4) + (u >> 5)) - ((v >> 1) + (v >> 3) + (v >> 4) + (v >> 5)));
b = RGB(y + u + (u >> 1) + (u >> 2) + (u >> 6));

YUV422toRGB888:
y1 = img[0];
u = img[1];
y2 = img[2];
v = img[3];
rgb1 = YUV444toRGB888(y1, u, v);
rgb2 = YUV444toRGB888(y2, u, v);

YUV411toRGB888:
u  = img[0];
y1 = img[1];
y2 = img[2];
v  = img[3];
y3 = img[4];
y4 = img[5];
rgb1 = YUV444toRGB888(y1, u, v);
rgb2 = YUV444toRGB888(y2, u, v);
rgb3 = YUV444toRGB888(y3, u, v);
rgb4 = YUV444toRGB888(y4, u, v);

YUV420toRGB888:
total = width * height;
y = img[py * width + px];
u = img[(py / 2) * (width / 2) + (px / 2) + total];
v = img[(py / 2) * (width / 2) + (px / 2) + total + (total / 4)];
rgb = YUV444toRGB888(y, u, v);
[ 此帖被gt945在2011-11-14 09:23重新编辑 ]
级别: 侠客
UID: 53362
精华: 0
发帖: 110
金钱: 570 两
威望: 114 点
综合积分: 220 分
注册时间: 2011-08-06
最后登录: 2013-05-21
2楼  发表于: 2011-11-14 09:13
首先特别感谢gt945,如果以后有用的着我的地方尽管开口,呵呵。现在我已方向感明确,但我抽象能力比较差,现在问题的关键是如何从YUV422里面一个一个的把数据取出来,再存储成YUV444的,,,,,我再研究研究,,完了再想您请教,,,,,谢谢
级别: 侠客
UID: 53362
精华: 0
发帖: 110
金钱: 570 两
威望: 114 点
综合积分: 220 分
注册时间: 2011-08-06
最后登录: 2013-05-21
3楼  发表于: 2011-11-14 10:06
gt945兄台你好,,我想要把YUV422的数据取出来,,,,先存成YUV444的,,,不知道应该怎么操作。我的想法是,四个四个的取,六个六个的存。有两个数组,一个是yuv444[w*h*2];   ,,,,,另个一个是yuv444[w*h*3];我不知道怎么写循环语句,,请兄台指点,,如果我这种想法不对的话,,,希望可以指出来。谢谢
级别: 侠客
UID: 6350
精华: 2
发帖: 110
金钱: 895 两
威望: 486 点
综合积分: 260 分
注册时间: 2009-05-29
最后登录: 2016-10-11
4楼  发表于: 2011-11-15 10:34
其实没必要转存

YUV422格式如下: Y1 U1 Y2  V1          Y3 U3 Y4 V3          Y5 U5 Y6 V6          Y7 U7 Y8 V7
转换后
YUV444 : Y1 U1 V1  Y2  U1 V1          Y3 U3 V3  Y4  U3  V3          Y5 U5 V6 Y6 U5 V6          Y7 U7 V7 Y8 U7 V7