笔记-YUV和RGB的那些事~

在学习Metal绘制渲染的过程当中,看到了颜色编码转换有关的YUV,以前知道YUV和RGB都是颜色变色编码种类,可是一直不知道具体是啥以及有啥联系。因此花了点时间翻看资料并思考理解和整理了一下知识点。学习

RGB和YUV

​ 咱们知道颜色都是有三原色(红、绿、蓝)组成的,也就是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视频

RGB和YUV的转换

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

YUV编码格式

主流采样方式三种:YUV4:4:四、YUV4:2:二、YUV4:2:0。YUV编码方式能够减小图片的大小,减小带宽和资源。

YUV 4:4:4采样

图中展现的有6个像素,每一个像素有YUV份量组成。从图片咱们知道YUV4:4:4采样方式每一个份量都采样,因此同等宽高的图片的大小和RGB的大小是一致的。经过这个采样方式图片大小并无减小,可是在编码转换的时候,图像从RGB转YUV,首先转成该采样方式的图像,而后再经过其余采样方式进行转换。

YUV 4:2:2采样

从这张图片咱们知道该采样的特色就是UV份量分别隔一个像素进行采样,即两个像素共用一个UV份量,Y和UV份量按2:1的比例取样。采用这种编码方式,图片大小是原图大小的66.7%,这就是为啥会普遍采用YUV编码方式来进行传输,能够减小带宽、节约资源。

YUV 4:2:0采样

从上面咱们知道YUV4:2:2方式图片大小就减小了1/3,可是经常使用的是YUV 4:2:0采样方式。

从上图可知,咱们知道图片比在RGB空间的大小减小了50%,是否是很夸张!但这就是他的神奇之处。图中有两行像素,每行像素有6个像素。该采样方式的特色就是4个像素共用一套UV份量,每一个像素均取Y份量,一行像素取U份量,邻行像素取V份量,而且UV份量像素取一次。例如图中的第0、一、七、8像素共用了U0和V8。正是因为该采样方式能够直接减小一半的图片大小,该方式很经常使用。

YUV存储格式

YUV采样存储数据有两种方式:

  • planr: 平面格式,先连续存储像素点的Y份量,其次存储U份量,最后存储V份量。
  • packed: 打包模式,每一个像素点的Y份量、U份量、V份量连续交替存储的。

正式因为采样的方式不一样和存储格式的不一样因此有多种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)
packed方式

上表中的打包样式YUYV、UYVY都是根据每一个像素均取Y份量,隔像素取U、V份量。因此他的存储排序以下:

YUYV:

Y0U0 Y1V0 Y2U2 Y3V2 Y4U4 Y5V4 Y6U6

UYVY:

U0Y0 V0Y1 U2Y2 V2Y3 U4Y4 V4Y5 U6Y6

YUV422P格式和上面差很少,都是相似的组合方式。

planr方式
基于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采样与格式

相关文章
相关标签/搜索