目录
名词解释
RGB格式
YUV格式
1 名词解释
常用的像素的格式有两种:RGB 格式和YUV格式,像素的格式定义了像素在内存中的编码方式。在介绍这两种格式的信息之前,我们连接一些常用名词:
像素
像素是一个图片的基本单位。单位 px 是 picture element 的缩写,所以像素有“图像元素”之意。
分辨率
是指图像的大小或尺寸,比如 1920*1080(行周期数*场周期数)。
位深:是指在记录数字图像颜色时,计算机实际上是用每个像素所需要的位深来表示的,比如红色、绿色、蓝色的分量用 8bit。
帧率
在1秒钟时间里传输的图片的帧数,也可以理解为图像处理器每秒中能够刷新的次数,比如 25fps 每秒中有 25 张图片(帧率通常也称为刷新率)。
码率
视频文件在单位时间内使用的数据流量,比如 1Mbps。(码率就是通常我们
描述速率)
Stride
指在内存中每行像素的所占的空间大小,目的是为了实现内存对齐,每行像素在内存中所占的空间并不一定是图像的宽度。
2 RGB 格式
RGB 格式有三个通道 R、G、B,分别对应红色、绿色、蓝色,由这三个分量直接决定颜色。有些图片会附加一个 Alpha 通道,用于表示透明度,即四个分量共同控制颜色(RGBA)。
一张 1920*1080 的图片,具有 2073600 个像素点,如果采用 RBG 的格式进行存储,其占用的空间大小为:
1920*1080*3/1024/1024 = 5.93MB
如果采用 RBGA 的格式进行存储,其占用的空间大小为:
1920*1080*4/1024/1024 = 7.91MB
3 YUV 格式
3.1 YUV 的编码格式
相比于 RGB 格式,YUV 格式最大的好处是在保持图像质量降低不明显的前提下,减小文件大小。YUV 的编码适合采用亮度和色度来指定像素的颜色,其中 Y 表示亮度,U 和 V 表示色度。对于 YUV 图像来说,并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应自己的 UV 分量,也可以几个 Y 分量共用 UV 分量。
3.2 YUV 的存储格式
YUV 的存储格式可分为两种:平面格式(Plannr)和紧凑模式(Packed)。
平面格式(Plannr)
对于 planar 的 YUV 格式,先连续存储所有像素点的 Y,紧接着存储所有像素点的 U,存储所有像素点的 V,或者是先 V 后 U。
紧凑模式(Packed)
对于 packed 的 YUV 格式,每个像素点的 Y,U,V 是连续交替存储的。比如 YUV420P,其中 P 表示紧凑,YUV420SP 其中的 SP 表示“半紧凑”。
注意:p 表示逐行采样,i 表示隔行采样。
3.3 YUV 的采样方式
YUV 主流的采样方式有三种:YUV4:4:4、YUV4:2:2、YUV4:2:0。
YUV4:4:4 格式
YUV4:4:4 这种格式占用的空间最大,每个像素都有一个 Y 分量、U 分量、V 分量。YUV4:4:4 大小和 RGB 存储的大小是一样的,为 3 个字节。根据 U 和 V 的顺序不同,又有两种不同的格式。YUV4:4:4每个像素包含一个 Y 分量和一个 UV 分量。
每个像素的占用的空间:
1byte(Y) + 1byte(U) + 1byte(V) = 3 byte
单帧占用空间:
FrameSize = FrameWith * FrameWith * 3(byte)
单个像素
2*2 个像素
YUV4:2:2 格式
YUV4:2:2 是每两个 Y 分量共用一个 UV 分量,所以一个像素占用两个字节,根据存储顺序不同分为四种不同格式。
每个像素占用空间为:
1 byte(Y) + 1/2 byte(U) + 1/2 byte(V) = 2 byte
单帧占用空间:
FrameSize = FrameWith * FrameWith * 2(byte)
2 个像素
4*4 个像素
YUV4:2:0 格式
YUV4:2:0 是每四个 Y 分量共用一个 UV 分量,所以一个像素占用 1.5 个字节,根据存储顺序不同分为四种不同格式。
每个像素占用空间为:
1 byte(Y) + 1/4 byte(U) + 1/4 byte(V) = 1.5 byte
单帧占用空间:
FrameSize = FrameWith * FrameWith * 1.5(byte)
四个像素
4*4 个像素