YUV和 YCbCr之间的差 异
一、和rgb之间换算公式的差异
yuv<-->rgb
Y'= 0.299*R' + 0.587*G' + 0.114*B' [0~255]
U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y') [-111.18~111.18]
V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y') [-156.825~156.825]
R' = Y' + 1.140*V'
G' = Y' - 0.394*U' - 0.581*V'
B' = Y' + 2.032*U'
YCbCr<-->rgb
Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16 [16~235.045]
Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128 [16.055~239.945]
Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128 [ 16.055~239.945 ]
R' = 1.164*(Y’-16) + 1.596*(Cr'-128)
G' = 1.164*(Y’-16) - 0.813*(Cr'-128) - 0.392*(Cb'-128)
B' = 1.164*(Y’-16) + 2.017*(Cb'-128)
二、来源上的差异
yuv色彩模型来源于rgb模型,
该模型的特点是将亮度和色度分离开,从而适合于图像处理领域。
应用:basic color model used in analogue color TV broadcasting.
YCbCr模型来源于yuv模型。YCbCr is a scaled and offset version of the YUV color space.
应用:数字视频,ITU-R BT.601 recommendation
ps:
通过上面的比较可以确定,我们在h.264,mpeg等编码标准中用的yuv其实是YCbCr,大家不要被名称搞混淆了。
YUV的格式在存储上有两类布局: Packed和Plannar。Packed的方式就是把相邻几个象素打包起来。比如把水平方向2个象素打包到一个DWORD里。Planner方式则相反。Y分量和UV分量完全分开来保存。
YUY2 是packed方式的。水平方向两个像素打包到一个DWORD,并且UV采样率只有Y的一半,这符合人的视觉特征能有效的压缩数据,具体布局为[Y0, U0,Y1,V0]。 这种格式常见于MPEG1的解码“器”。
YV12 是plannar方式。对于一个MxN大小的视频来说,数据布局为[Y:M x N] [U:M/2 x N/2] [V:M/2 x N/2]. 也就是说UV的采样率在水平和垂直方向上都只有Y的一半。则常见于H.264的解码“器”。
NV12、NV21也都属于plannar方式,叫做YUV420SP、YVU420SP,而前面说的YV12是YUV420P,区别在于NV12、NV21的U、V是交叉放一起的。NV12、NV21这两种方式唯一的差别是U、V的顺序。
NV12
[Y0, Y1]
[Y2, Y3]
[U0, V0]
NV21
[Y0, Y1]
[Y2, Y3]
[V0, U0]