YUV与RGB

作者: 丸疯 | 来源:发表于2020-09-03 16:44 被阅读0次

我们都知道屏幕上的每个像素点都是由RGBA组成,R:red(红)、G:green(绿)、B:blue(蓝)、A:alpha(透明度)。那么YUV是干什么的呢?

YUV

  • 什么是YUV
    YUV是一种颜色编码方法。常使用在各个视频处理组件中。YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。其中Y代表亮度(Luminance、Luma),UV代表色度(Chrominance、Chroma)。
  • 为什么要使用YUV颜色编码方式
    首先我们先了解RGB颜色编码方式,在图像显示中,一张1280 * 720大小的图片,代表他有1280 * 720个像素点。其中每一个像素点都采用RGB编码方式,每个原色都占用8bit,也就是一个字节,一个像素点就占用24bit,也就是三个字节。所以一张图片占用的存储空间就是:
1280 * 720 * 3 / 1024/ 1024 = 2.63M

YUVRGB类似,每个像素点都包含了三个分量:YUV分量。与RGB编码不同的是,Y分量和UV分量是可以分离的,如果没有UV分量我们看到的就是一张黑白图片,就像以前的黑白电视机。对于YUV图像来说,并不是每个像素点,都必须包含UV分量,没有UV分量我们只是看不到彩色,所以我们可以合理调整UV分量的采样方式,来达到节约存储空间的目的。Y分量是负责亮度的,所以Y分量是每个像素点都必须采样的。

此图来源AVFoundation

YUV采样格式

  • YUV4:4:4
    4:4:4表示Y、U、V三个分量的采样比重一样,所以产生的每个像素点也都是3个字节。与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,...

映射还原的像素点:
[y0, u0, v0], [y1, u1, v1], [y2, u2, v2], [y3, u3, v3],....
  • YUV4:2:2
    4:2:2表示Y、U、V三个分量的采样比重。我们知道Y分量我们肯定是每个像素点都会采样,那么UV分量交叉采样,就是第一个像素点采样了U分量不采样V分量,第二个像素点就不再采样U分量转为采样V分量。相邻的两个像素点共用一套UV分量,达到4:2:2的采样比重。
    同样一张1280*720的图片,使用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],....

所占存储空间大小:
(1280 * 720 * 8 + 1280 * 720 * 0.5 * 8 * 2) / 8 / 1024 / 1024 = 1.76 MB
YUV4:2:2图解
  • YUV4:2:0
    YUV4:2:0并不是说不采样V分量,而是指,在每一行扫描时,只扫描一种色度分量(U分量或者V分量),与Y分量按照2:1的方式进行采样。比如,第一行扫描时,YU按照2:1的方式进行采样,不采样V分量。第二行扫描时,YV按照2:1的方式进行采样,不采样U分量,如此交替的进行逐行采样。就是我们所说的YUV4:2:0
    同一张1280*720的图像采用YUV4:2:0采样:
原图像:
[y0,   u0,  v0], [y1,   u1,  v1], [y2,   u2,  v2], [y3,   u3,  v3]
[y4,   u4,  v4], [y5,   u5,  v5], [y6,   u6,  v6], [y7,   u7,  v7]
[y8,   u8,  v8], [y9,   u9,  v9], [y10, u10, v10], [y11, u11, v11]
[y12, u12, v12], [y13, u13, v13], [y14, u14, v14], [y15, u15, v15]

按YUV4:2:0采样的码流:
y0,u0,y1,y2,u2,y3,y4,v4,y5,y6,v6,y7,y8,u8,y9,y10,u10,y11,y12,v12,y13,y14,v14,y15,...

映射还原的像素点:
[y0,   u0,  v4], [y1,   u0,  v4], [y2,   u2,  v6], [y3,   u2,  v6]
[y4,   u0,  v4], [y5,   u0,  v4], [y6,   u2,  v6], [y7,   u2,  v6]
[y8,   u8, v12], [y9,   u8, v12], [y10, u10, v14], [y11, u10, v14]
[y12,  u8, v12], [y13,  u8, v12], [y14, u10, v14], [y15, u10, v14]

所占存储空间大小
(1280 * 720 * 8 + 1280 * 720 * 0.25 * 8 * 2) / 8 / 1024 / 1024 = 1.32 MB
YUV4:2:0图解

YUV和RGB的转换

显示器都是通过RGB模型来显示图像的,因为需要节省带宽,我们选择YUV模型来进行传输。所以我们需要采集图像的时候,先将RGB模型转换成YUV模型,在显示的时候再将YUV模型转换成RGB模型
RGBYUV的转换,就是将图像所有像素点的R、G、B分量量转换到 Y、U、V分量。RGB模型和YUV模型之间的相互转换的公式如下:

  • RGB转换成YUV:
    Y = 0.299 * R + 0.587 * G + 0.114 * B
    U = -0.147 * R - 0.289 * G + 0.436 * B
    V = 0.615 * R - 0.515 * G - 0.100 * B

  • YUV转RGB
    R = Y + 1.14 * V
    G = Y - 0.39 * U - 0.58 * V
    B = Y + 2.03 * U

相关文章

  • YUV420转换RGB公式

    YUV420转换RGB YUV420转换RGB公式

  • RGB与YUV

    RGB与YUV RGB色彩空间 RGB是以颜色发光的原理设计:三原色光模式(RGB color model),又称...

  • YUV格式与RGB的转换

    前言 YUV与RGB是两种不同的颜色空间,视频一般都用YUV来进行存储,因为相同分辨率的视频RGB占用空间为YUV...

  • 音视频开发:RGB与YUV相互转换问题

    本文档描述了RGB与YUV两个颜色空间的相互转换问题。 很多书在讲YUV颜色空间或YUV模型时,一般直接给出RGB...

  • 转码的四个案例

    一,swcale实现rgb24转yuv420p 二,swcale实现YUV转RGB

  • YUV与RGB

    我们都知道屏幕上的每个像素点都是由RGBA组成,R:red(红)、G:green(绿)、B:blue(蓝)、A:a...

  • 图像处理学习资料

    RGB、YUV和HSV颜色空间模型 RGB立方体模型RGB YUV:其中“Y”表示明亮度(Luminance或Lu...

  • FFmpeg - 播放YUV,视频帧格式转换

    播放YUV 定时读取YUV的视频帧 将YUV转换为RGB数据 用RGB数据生成CGimage 在view上绘制CG...

  • YUV和RGB

    色彩空间 我们经常用到的色彩空间主要有RGB、YUV, CMYK, HSB, HSL等等,其中YUV和RGB是视讯...

  • RGB、YUV

    RGB和YUV是什么? RGB和YUV是色彩空间模型,还有诸如HSV不是存储格式,如PEG、BMP、JPEG、GI...

网友评论

      本文标题:YUV与RGB

      本文链接:https://www.haomeiwen.com/subject/iaansktx.html