RGBA
对于一副图像,一般使用整数表示方法来进行描述,比如计算一张1280*720的GRBA_8888的图形的大小,可采用如下方法:
1280*720*4/1024/1024 = 3.516MB.
这也是位图在内存中所占用的大小,所以每一张图像的裸数据都是很大的。
视频是一张一张的图片组成的,如果帧率是60,我们计算一下视频为1小时,视频所占有的内存
3.5166060*60/1024 = 741.65625G,可想而之占用的内存太大,这就出现了YUV颜色编码.
YUV颜色编码
YUV 颜⾊编码采⽤的是 明亮度 和 ⾊度 来指定像素的颜⾊。其中,Y 表示明亮度
(Luminance、Luma),⽽ U 和 V 表示⾊度(Chrominance、Chroma)。⽽⾊
度⼜定义了颜⾊的两个⽅⾯:⾊调和饱和度
和 RGB 表示图像类似,每个像素点都包含 Y、U、V 分量。但是它的 Y 和 UV 分量是可以分离
的,如果没有 UV 分量⼀样可以显示完整的图像,只不过是⿊⽩的。
对于 YUV 图像来说,并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应⾃⼰的 UV 分量,也可以⼏个 Y 分量共⽤ UV 分量。
YUV 采样格式 — YUV4 : 4 : 4
YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样⽐例相同,因此在⽣成的图像⾥,每个像素的三个分量信息完整,都是 8 bit,也就是⼀个字节。这种采样方式和RGB这种方式所占的内存一样大,没有减少内存的使用。
原始像素为[Y0,U0,V0],[Y1,U1,V1],[Y2,U2,V2],[Y3,U3,V3]
经过YUV4 : 4 : 4采样的像素也为[Y0,U0,V0],[Y1,U1,V1],[Y2,U2,V2],[Y3,U3,V3]
YUV 采样格式 — YUV4 : 2 : 2
YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的⼀半,Y 分量和 UV 分量按照 2 : 1 的⽐例采样。如果⽔平⽅向有 10 个像素点,那么采样了 10 个 Y 分量,⽽只采样了 5 个 UV 分量。通过YUV4 : 4 : 4每个像素占3个字节,通过YUV4 : 2 : 2,每个像素占2个字节。通过YUV4 : 2 : 2采样格式,还是节省内存的
原始像素为[Y0,U0,V0],[Y1,U1,V1],[Y2,U2,V2],[Y3,U3,V3]
经过YUV4 : 2 : 2采样的像素也为[Y0,U0],[Y1,V1],[Y2,U2],[Y3,V3]
最后还原的像素为[Y0,U0,V1],[Y1,U0,V1],[Y2,U2,V3],[Y3,U2,V3]
YUV 采样格式 — YUV4 : 2 : 0
YUV 4:2:0 采样,并不是指只采样 U 分量⽽不采样 V 分量。⽽是指,在每⼀⾏扫描时,只扫描⼀种⾊度分量(U 或者 V),和 Y 分量按
照 2 : 1 的⽅式采样。⽐如,第⼀⾏扫描时,YU 按照 2 : 1 的⽅式采样,那么第⼆⾏扫描时,YV 分量按照 2:1 的⽅式采样。对于每个⾊
度分量来说,它的⽔平⽅向和竖直⽅向的采样和 Y 分量相⽐都是 2:1 。假设第⼀⾏扫描了 U 分量,第⼆⾏扫描了 V 分量,那么需要扫描两⾏才能够组成完整的 UV 分量,一个像素占1.5字节
原始像素
[Y0,U0,V0],[Y1,U1,V1],[Y2,U2,V2],[Y3,U3,V3]
[Y8,U8,V8],[Y9,U9,V9],[Y10,U10,V10],[Y11,U11,V11]
[Y16,U16,V16],[Y17,U17,V17],[Y18,U18,V18],[Y19,U19,V19]
采样像素为
[Y0,U0],[Y1],[Y2,U2],[Y3]
[Y8,V8],[Y9,],[Y10,V10],[Y11]
[Y16,U16],[Y17,],[Y18,U18],[Y19]
还原的像素为
[Y0,U0,V8],[Y1,U0,V8],[Y2,U2.V10],[Y3,U2,V10]
[Y8,U0,V8],[Y9,,U0,V8],[Y10,U2,V10],[Y11,U2,V10]
[Y16,U16,V8],[Y17,U16,V8,],[Y18,U18,V10],[Y19,U18,V10]
YUV 转化 RGB
R = 1.164*Y + 1.596 * V - 222.9
G = 1.164*Y - 0.392 * U - 0.823 * V+ 135.6
B = 1.164*Y + 2.017 * U- 276.8
RGB砖YUV
Y = 0.257*R' + 0.504*G' + 0.098*B' + 16
U = -0.148*R' - 0.291*G' + 0.439*B' + 128
V = 0.439*R' - 0.368*G' - 0.071*B' + 128