YUV到RGB的转换
以下内容来源于网络,下面三个链接里的内容是比较好的,感谢博主的分享。
http://blog.csdn.net/housisong/article/details/1859084
http://blog.csdn.net/tommy_wxie/article/details/37909643
http://www.cnblogs.com/qinjunni/archive/2012/04/06/2434393.html 这里有介绍YUV转RGB的优化 位运算和查表法
YUV到RGB的转换公式:网上收集到的各种公式
RGB颜色空间到YUV颜色空间的转换公式:
Y= 0.256788*R + 0.504129*G + 0.097906*B + 16;
U=-0.148223*R - 0.290993*G + 0.439216*B + 128;
V= 0.439216*R - 0.367788*G - 0.071427*B + 128;
(以下装换关系来自网络,本质都是一样的)
YUV颜色空间到RGB颜色空间的转换公式: (给的示例中用的是这个)
B= 1.164383 * (Y - 16) + 2.017232*(U - 128);
G= 1.164383 * (Y - 16) - 0.391762*(U - 128) - 0.812968*(V - 128);
R= 1.164383 * (Y - 16) + 1.596027*(V - 128);
另一种转换关系:
-
// 转换公式(浮点方式)
-
R = Y + 1.4075*(V-128)
-
G = Y - 0.3455*(U-128) - 0.7169*(V-128)
-
B = Y + 1.779*(U-128)
( 补充: 在视频格式中基本上都用的上面的转换公式;但在其他一些地方可能会使用下面的转换公式(不同的使用场合可能有不同的转换系数):
Y = 0.299*R + 0.587*G + 0.114*B;
U = -0.147*R - 0.289*G + 0.436*B;
V = 0.615*R - 0.515*G - 0.100*B;
R = Y + 1.14*V;
G = Y - 0.39*U - 0.58*V;
B = Y + 2.03*U;
)
RGB to YUV Conversion
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16 Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128 Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
YUV to RGB Conversion
B = 1.164(Y - 16) + 2.018(U - 128) G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) R = 1.164(Y - 16) + 1.596(V - 128) 无论是YUV444、YUV422、还是YUV420格式,根据对应的方法提取完YUV并转换为RGB数据后,其文件大小应该是: 图像的高 * 图像的宽 * 3 。由于不同的YUV码流转换为RGB数据的提取方式均不相同
我们知道YUYV视频格式的内存数据布局图示:
图中可以看出Y的数据量是U或者V的两倍,这是因为人的眼睛一般对亮度比对颜色更敏感一些,所以将连续的两个像素的U(或V)值只保存一个U(或V)值,那么每个
像素平均占用16bit储存空间。
项目中使用到的YUV转RGB格式代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|