1、RGB表示方式
1.1、浮点表示
归一化表示,取值范围0.0~1.0
,如openGL对每个子像素点的表示方式。
1.2、整数表示
取值范围0~255
或者00~FF
,8bit表示一个子像素。
如图像格式RGBA_8888,表示4*8bit表示一个像素,
而RGB_565用5 + 6 + 5 bit表示一个像素。
一张1280 * 720, RGBA_8888格式的图片的大小 = 1280 * 720 * 32bit = 1280 * 720 * 32 / 8 byte,也是位图bitmap在内存中占用的大小。
2、YUV表示方式
视频的裸数据一般使用YUV数据格式表示。Y表示明亮度(Luminance/Luma),也称灰度值(灰阶值)。UY表示色度(Chrominance/Chroma),均表示影响的色彩和饱和度,用于指定像素的颜色。
亮度需要透过RGB输入信号建立,方式为将RGB信号的特定部分(g分量信号)叠加到一起。
色度定义了颜色的色调和饱和度,分别用Cr、Cb表示。(C代表分量(是component的缩写))
Cr
反映RGB输入信号红色部分
与RGB信号亮度值之间的差异。
Cb
反映RGB输入信号蓝色部分
与RGB信号亮度值之间的差异。
视频帧裸数据之所以采用YUV色彩空间,使用为亮度信号Y和色度信号UV是分离的
。当无UV色度信号,只有Y亮度信号时,那么这样表示的图像就是黑白灰度图像。彩色电视正是使用YUV空间使用Y亮度信号解决彩色电视与黑白电视的兼容问题、使黑白电视也能接收彩色电视信号。最常用的YUV都使用8个字节来表示,所以取值范围就是0~255。但是广播电视系统不传输很低或很高的值,为了防止信号变动造成过载,因而把过高或过低这两边的数值作为“保护带”,在Rec.601和BT.709的广播标准中,Y的取值范围16~235,UV的取值范围都是16~240。
2.1、YUV的采样格式
YUV最常用的采样格式是4:2:0,还有4:2:2、4:4:4等格式,一般灰度(也就是亮度)的采样是不会减少的,因为人眼对亮度的敏感度高于色度,因此会选择适当地减少对色度的采样,节约空间
。
4:4:4
表示色度值(UV)没有减少采样。即Y,U,V各占一个字节,加上Alpha通道一个字节,总共占4字节
这个格式其实就是24bpp(bitperpixel)的RGB格式了。
4:2:2
表示UV分量采样减半,比如第一个像素采样Y,U,第二个像素采样Y,V,依次类推每个点占用2个字节,由两个相邻的像素组成一个宏像素(macro-pixel)。
4:2:0
这种采样并不意味着只有Y,Cb而没有Cr分量,这里的0说的U,V分量隔行才采样一次
。比如第一行采样 4:2:0,第二行采样 4:0:2,依次类推...在这种采样方式下,每一个像素占用16bits或10bits空间。
4:1:1
可以参考4:2:2分量,是进一步压缩,每隔四个点才采一次U和V分量。一般是第0点采Y,U,第1点采Y,第3点采YV,第四点采Y,依次类推。
2.2、YUV码流的存储格式(与采样格式密切相关)。
YUV存储格式分为两类:planar和packed
。
对于packed(打包格式)的YUV格式,每个像素点的Y,U,V是连续交叉存储的。将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel)
如YUV422采样的存储格式YUYV:
Y0 U0 Y1 V0 Y2 U2 Y3 V2....
其中Y0 U0 Y1 V0
这个像素组成一个宏像素。(Y0和Y1亮度分量共用U0,V0色度分量)。
对于planar(平面格式)的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。
如YUV422采样的存储格式YUV422P:
3、YUV和RGB之间的转化
RGB 转换成 YUV的标准公式:
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 转换成 RGB的标准公式:
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)
///当然,可以对标准公式做适当的简化,降低运算量
参考文章:
音视频开发进阶指南
YUV格式分析
YUV和RGB格式分析
YUV
YUV格式的解析
图文详解YUV420数据格式