• 音视频基础知识---像素格式YUV(转)


    本文转载自:adolph_lu 的音视频基础知识---像素格式YUV

    一、YUV概述

    YUV,是一种颜色编码方法。常使用在各个影像处理组件中。 YUV 在对照片或影片编码时,考虑到人类的感知能力,允许降低色度的带宽。YUV,分为三个分量:

    • Y 表示明亮度(Luminance或Luma),也就是灰度值;
    • U(Cb) 表示色度(Chrominance)
    • V(Cr) 表示浓度(Chroma)

    通常 UV 一起描述影像色彩和饱和度,用于指定像素的颜色。因此如果只有 Y 分量,没有 UV 分量,那么得到的就是黑白灰度图像。

    对于 YUV 图像来说,并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应自己的 UV 分量,也可以几个 Y 分量共用 UV 分量。


    二、YUV采样格式

    YUV444

    YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bit,也就是一个字节。通过 YUV444 采样的图像大小和 RGB 颜色模型的图像大小是一样的。

    图像像素数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3 
    采样的码流: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3 
    为什么叫4:4:4 , 意思是每4个像素里的数据有4个Y, 4个U, 4个V 
    Y分量的大小: w*h 
    U分量的大小: w*h 
    V分量的大小: w*h
    

    一张 1280 * 720 大小的图片,在 YUV 4:4:4 采样时的大小为:

    (1280*720*8 + 1280*720*8 + 1280*720*8)/8/1024/1024 = 2.64 MB
    

    YUV422

    YUV 4:2:2 采样,意味着每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个,Y 分量和 UV 分量按照 2 : 1 的比例采样。如果水平方向有 8 个像素点,那么就采样 8 个 Y 分量,4 个 UV 分量。

    图像像素数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3 
    采样的码流: Y0 U0 Y1 V1 Y2 U2 Y3 V3 
    为什么叫4:2:2,意思是每4个像素里面有4个Y,2个U,2个V 
    Y分量的大小: w*h 
    U分量的大小: w*h/2 
    V分量的大小: w*h/2
    

    一张 1280 * 720 大小的图片,在 YUV 4:2:2 采样时的大小为:

    (1280*720*8 + (1280*720)/2*8 + (1280*720)/2*8)/8/1024/1024 = 1.76 MB
    

    通过与 YUV444 采样进行比较可以算出,YUV 422 采样的图像比 YUV444 采样图像节省了三分之一的存储空间,在传输时占用的带宽也会减少。


    YUV420

    YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。比如,第一行扫描时,YU 按照 2 : 1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。

    图像像素数据:    [Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3] 
                    [Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
    采样的码流:     Y0 U0 Y1 Y2 U2 Y3 
                    Y5 V5 Y6 Y7 V7 Y8 
    为什么叫4:2:0,意思是每4个像素中有4个Y,2个U,0个V,而下一行的四个像素中有4个Y,0个U,2个V
    Y分量的大小: w*h 
    U分量的大小: w*h/4 
    V分量的大小: w*h/4
    

    一张 1280 * 720 大小的图片,在 YUV 4:2:0 采样时的大小为:

    (1280*720*8 + (1280*720)/4*8 + (1280*720)/4*8)/8/1024/1024 = 1.32 MB
    

    可以看到 YUV 420 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。


    三、YUV存储格式

    YUV 存储格式有两大类:planar 和 packed:

    • planar,平面格式,先连续存储所有像素点的 Y,紧接着存储所有像素点的 U,然后是所有像素点的 V;将几个分量分开存,比如 YUV420 中,data[0] 专门存 Y,data[1] 专门存 U,data[2] 专门存 V。
    • packed,打包格式,每个像素点的 Y, U, V 是连续交错存储的,所有数据都存在 data[0] 中。

    根据采样方式和存储格式的不同,就有了多种 YUV 格式。这些格式主要是基于 YUV 4:2:2 和 YUV 4:2:0 采样。常见的基于 YUV 4:2:2 采样的格式如下所示:


    YUYV

    YUYV 格式是采用打包格式进行存储的,指每个像素点都采用 Y 分量,但是每隔一个像素采样它的 UV 分量,排列顺序如下:

    Y0 UO Y1 V0 Y2 U1 Y3 V1
    

    Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U1 V1 分量。


    UYVY

    UYVY 格式是采用打包格式进行存储,它的顺序和 YUYV 相反,先采用 U 分量再采样 Y 分量,排列顺序如下:

    U0 Y0 V0 Y1 U1 Y2 V1 Y3
    

    YUV422P

    YUV 422P 格式,又叫做 I422,采用的是平面格式进行存储,先存储所有的 Y 分量,再存储所有的 U 分量,再存储所有的 V 分量。

    Y0 Y1 Y2 Y3 U0 U1 V0 V1
    

  • 相关阅读:
    php 安装 Redis 扩展
    远程连接mysql出现"Can't connect to MySQL server 'Ip' ()"的解决办法
    MySQL 连接超时:报错SQLSTATE[HY000] [2002] Connection timed out解决
    linux命令解压压缩rar文件
    Xshell、Xftp评估过期的解决办法
    远程连接mysql出现1045错误的解决办法
    PHP 判断当前日期是否是法定节假日或者休息日
    PHP解压压缩包文件到指定目录的实现
    PHP逐行解析文件,并写入数据库
    PHP编程实现多维数组按照某个键值排序的方法
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/12120696.html
Copyright © 2020-2023  润新知