急!请教:如何进行YUV422与RGB24之间的转换?
huamy 2004-09-03 02:40:58 请教如何进行YUV422格式与RGB24格式之间的数据转换?因为我的从开发板上得到的数据是YUV422格式的数据,要将其转换成RGB24格式;最后还要将RGB24图像转化成YUV422格式,已提供给相应的输出设备。
如何进行YUV422-->RGB24,以及RGB24-->YUV422的变换?
其中:YUV422的三个分量各用一个数组存储,既是比如1024个象素的图像,其YUV数据分别存储于CHAR Y[1024]; CHAR U[512], V[512]中,现在如何进行RGB24格式的转换?再如何将RGB24还原回YUV422?
看到有很多资料上对YUV-RGB之间的变换关系矩阵有很多种,请问,它们各个矩阵的意义与区别?各自适用于何种情况?有的要减去一个常数128、0.5又是什么意思?
这是我看到的主要的几种变换关系:
1)
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
2)
YUV与RGB图象之间的变换关系:
Y= 0.2990R+0.5870G+0.1140B
U=-0.1687R-0.3313G+0.5000B + 128
V= 0.5000R-0.4187G-0.0813B + 128
反变换关系:
R= 1.0Y + 0 +1.402 (V-128)
G= 1.0Y - 0.34413(U-128)-0.71414(V-128)
B= 1.0Y + 1.772 (U-128)+0
3)
Y601 = (16842*R + 33030*G+ 6423*B)/65535 + 16
Cb = (–9699*R – 19071*G+ 28770*B)/65536 + 128
Cr = (28770*R– 24117*G– 4653*B)/65536 + 128
R= 1.164(Y601 – 16) + 1.596(Cr – 128)
G= 1.164(Y601 – 16) – 0.813(Cr – 128) –0.391(Cb – 128)
B= 1.164(Y601 – 16) + 2.018(Cb – 128)
不明白:
a)第一种与第二种之间的区别:何时要加减128?为何有的又不是128而是16?
b)第二种与第三种的区别:为何第三种的系数要大些?
c)他们各自的RGB与YUV的取值范围是多少?