在学习Metal绘制渲染的过程当中,看到了颜色编码转换有关的YUV,以前知道YUV和RGB都是颜色变色编码种类,可是一直不知道具体是啥以及有啥联系。因此花了点时间翻看资料并思考理解和整理了一下知识点。学习
咱们知道颜色都是有三原色(红、绿、蓝)组成的,也就是RGB,能够组成很是多的颜色,这些咱们都知道的知识。在咱们录制视频和播放视频的时候采用的通常都是RGB编码格式,在屏幕上每个像素点都含有R份量、G份量、B份量,由这些一个个的像素上展现的颜色才构成了咱们看见的图片,视频是一帧帧图片组成的。 说完了RGB,寡下YUV,YUV和RGB同样,也是每一个像素都含有Y、U、V三中份量。YUV和黑白电视有关,正是由于工程师想要在黑白设备上呈现彩色而发明的编码格式😝,YUV是由Y(明亮度)、UV(色度)组成的,其实只要有Y值就能看见图片、视频,只不过是黑白的。编码
RGB编码格式中每一个份量占一个字节,即8bit,一个像素占用24bit空间,而YUV4:4:4编码格式中也是同样的(后面会说到YUV编码格式)大小。3d
假如一张图片大小为1024*1024,那么他的大小为:cdn
imageSize = 1024x1024x3x8/8/1024/1024 = 3.0MB视频
Y = 0.299R + 0.587G + 0.114Bblog
U = -0.14713R - 0.28886G + 0.436B排序
V = 0.615G - 0.51499G - 0.10001B图片
R = 1.0Y + 1.13983V资源
G = 1.0Y - 0.39465U - 0.58060V开发
B = 1.0Y + 2.03211U
主流采样方式三种:YUV4:4:四、YUV4:2:二、YUV4:2:0。YUV编码方式能够减小图片的大小,减小带宽和资源。
图中展现的有6个像素,每一个像素有YUV份量组成。从图片咱们知道YUV4:4:4采样方式每一个份量都采样,因此同等宽高的图片的大小和RGB的大小是一致的。经过这个采样方式图片大小并无减小,可是在编码转换的时候,图像从RGB转YUV,首先转成该采样方式的图像,而后再经过其余采样方式进行转换。
从这张图片咱们知道该采样的特色就是UV份量分别隔一个像素进行采样,即两个像素共用一个UV份量,Y和UV份量按2:1的比例取样。采用这种编码方式,图片大小是原图大小的66.7%,这就是为啥会普遍采用YUV编码方式来进行传输,能够减小带宽、节约资源。
从上面咱们知道YUV4:2:2方式图片大小就减小了1/3,可是经常使用的是YUV 4:2:0采样方式。
从上图可知,咱们知道图片比在RGB空间的大小减小了50%,是否是很夸张!但这就是他的神奇之处。图中有两行像素,每行像素有6个像素。该采样方式的特色就是4个像素共用一套UV份量,每一个像素均取Y份量,一行像素取U份量,邻行像素取V份量,而且UV份量像素取一次。例如图中的第0、一、七、8像素共用了U0和V8。正是因为该采样方式能够直接减小一半的图片大小,该方式很经常使用。
YUV采样存储数据有两种方式:
正式因为采样的方式不一样和存储格式的不一样因此有多种YUV格式,这些格式主要基于YUV 4:2:2采样和YUV4:2:0采样。
YUV存储格式 | 基于YUV 4:2:2采样格式 | 基于YUV 4:2:0采样格式 |
---|---|---|
planr | YUV420P、YUV420SP | |
packed | YUYV、UYVY、YUV422P(I422) |
上表中的打包样式YUYV、UYVY都是根据每一个像素均取Y份量,隔像素取U、V份量。因此他的存储排序以下:
YUYV:
Y0U0 Y1V0 Y2U2 Y3V2 Y4U4 Y5V4 Y6U6
UYVY:
U0Y0 V0Y1 U2Y2 V2Y3 U4Y4 V4Y5 U6Y6
YUV422P格式和上面差很少,都是相似的组合方式。
基于YUV 4:2:0样式 | 格式 |
---|---|
YUV420P | YU十二、YV12 |
YUV420SP | NV十二、NV21 |
YU12和YV12是YUV420P类型,先存储Y份量,而后在存储UV份量,不一样的是YU12是先Y再U后V,YV12是先Y再V后U存储。
Y0 Y1 Y2 Y3 Y4 ...
Uo U1 ...
V0 V1 ...
YUV420SP有NV12和NV21两种格式。与YUV 420P不一样的是先存储Y份量,而后UV份量交替存储。其中NV12是iOS中有的模式,就是先存储Y份量,UV份量交替存储时先U后V;而NV21时Android Q中有的模式,就是先存储Y份量,UV份量交替存储时先V后U。
经过了解YUV、RGB编码二者的关系,以及YUV编码格式带来的收益可让咱们在开发中有必定的帮助,以及YUV存储方式能够开拓一下知识点。
参考:
1.YUV-维基百科
2.YUV采样与格式