YUV是视频应用中使用的一类像素格式。YUV实际上是所有“YUV”像素格式共有的颜色空间的名称。 与RGB格式(红 - 绿 - 蓝)相对应,YUV颜色用一个称为Y(相当于灰度)的“亮度”分量和两个“色度”分量表示,分别称为U(蓝色投影)和V(红色投影) , YUV由此得名。YUV也可以称为YCbCr,虽然这些术语的含义略有不同,但它们往往会混着并互换使用。本文介绍了VLC媒体播放器环境中最有用的YUV像素格式。 除非另有说明,否则每个成员的用一个八位字节(8位)存储。

平面格式

平面(或有时“三平面”)格式对3种颜色分量中的每一种使用单独的矩阵。 换句话说,存在一个亮度像素值表和用于色度分量的两个单独的表。 这在像素的存储器中的分离表示对于视频编码更方便。

一、平面格式

平面(或有时称“三平面”)格式对3种颜色分量中的每一种使用单独的矩阵。 换句话说,存在一个亮度像素值表和用于色度分量的两个单独的表。 在存储器中将像素分离表示,这对于视频编码更方便。

1. YUV 4:2:0 (I420/J420/YV12)

(1). I420

首先它有一个“亮度”平面Y,然后是U色度平面,最后是V色度平面。

两个色度平面(蓝色和红色投影)在水平和垂直维度以2为倍数进行下采样。也就是说,对于2x2像素块,有4个Y样本,而只有1个U样本和 1 V样本。

对于4个像素,此格式需要4 * 8 + 8 + 8 = 48位,因此其位深度是12。

目前,I420是VLC中最常见的格式。 大多数视频解码器也以I420格式输出原始图像。

以下符号说明:每个字母(Y/U/V)代表一位。

  • 对于一个 I420 像素存储的位格式: YYYYYYYY UU VV
  • 对于50个像素的 I420 帧: YYYYYYYY*50 UU*50 VV*50 (or Y*8*50 U*2*50 V*2*50 for short)
  • 对于n个像素的 I420 帧: Y*8*n U*2*n V*2*n

(2). J420

J420可以说和I420完全相同,但具有全范围(“数字”,0-255)亮度(Y)分量而不是有限范围(“模拟”,16-240)。 色度平面与I420完全相同。

(3). YV12

YV12和I420也几乎完全相同,但U和V平面的顺序是相反的。 从名字来看,“YV”表示平面顺序:先存放Y,然后是V(最后是U)。 “12”指的是像素位深度:每像素12位,与I420相同。

2. YUV 4:2:2 (I422/J422)

(1). I422

与I420一样,I422有一个亮度平面Y和2个色度平面U,V。

不过,在I422中,色度平面(蓝色和红色投影)仅在水平维度上进行下采样,仍然是2倍。因此,在色度平面中存在与亮度平面中相同的行数。

对于2x2像素块,每个有4个Y样本和2个U和2个V样本。 深度为4 * 8 + 2 * 8 + 2 * 8 =每4像素64位,因此每像素16位,位深度是16。

一些视频编解码器支持I422(可选)以获得更高质量的视频编码。

(2). J422

J422与I422几乎完全相同,但具有全范围(“数字”,0-255)亮度(Y)分量而不是有限范围(“模拟”,16-240)。 色度平面与I422完全相同。

3. YUV 4:4:4

(1). I444

类似I420和I422,I444具有一个亮度平面Y和2个色度平面U和V。但色度平面未被下采样:每个像素有3个八位字节值。 因此深度为每像素24位(与RGB24或RGB32一样)。

一些视频编解码器支持I444。

二、 打包格式

在打包格式中,通常只有一个平面,所有亮度和色度数据都是交错的。 这类似于RGB像素格式,仅使用的是不同色彩空间。打包格式在网络摄像头中非常流行。 在硬件中,使用单独的平面是低效的:每个像素需要几次存储器访问。 打包格式更容易,因此使用起来更简单。另一方面,打包格式通常不能处理垂直下采样。 否则扫描线将具有不同的尺寸。 因此,通常,打包格式使用水平方向下采样,步长因子为2(即YUV 4:2:2)。

1. UYVY

也叫Y422或UYNV。

在UYVY中,色度样本被下采样2倍。

若使用UYVY,在连续的2个像素中,由U开始,然后是第一个像素的亮度,然后是V,然后是第二个像素的亮度。UUUUUUUU YYYYYYYY VVVVVVVV YYYYYYYY

2. YUY2

也叫YUYV,V422或YUNV。

在YUY2中,色度样本被下采样2倍。

若使用YUY2,在连续的2个像素中,从第一个像素的亮度开始,然后是U,然后是第二个像素的另一个亮度,然后再次是V.

YUY2和UYVY之间的转换是通过成对交换字节来实现的。

3. YVYU

YVYU和YUY2类似,但U和V顺序是颠倒的。

4. VYUV

待定

三、半平面格式

半平面格式,有两个平面而不是三个平面,一个平面用于亮度,一个平面用于两个色度分量。 它们有时也被称为双平面格式。

(1).NV12

与I420相似,NV12具有一个“亮度”平面Y和一个交错存着U和V的平面。

在NV12中,色度平面(蓝色和红色)在水平和垂直维度中被下采样2倍。

对于2x2像素块,有4个Y样本、1个U和1个样本。

这是NV12的图形表示。 每个字母代表一位:

  • 对于一个 NV12 像素: YYYYYYYY UVUV
  • 2个 NV12 像素: YYYYYYYYYYYYYYYY UVUVUVUV
  • 50个 NV12 像素: Y*8*50 (UV)*2*50
  • n个 NV12 像素: Y*8*n (UV)*2*n

原文地址:https://wiki.videolan.org/YUV/

VLC 用到的那些 YUV 格式的更多相关文章

  1. YUV格式介绍

    原文链接:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed.对于plana ...

  2. YUV格式分析

    转自:http://www.cnblogs.com/armlinux/archive/2012/02/15/2396763.html Andrew Huang <bluedrum@163.com ...

  3. 关于yuv格式

    首先,内存分布        1:YUV420          (1):I420:              YYYYYYYY UU VV    =>YUV420P          (2): ...

  4. 【视频处理】YUV格式说明

    YUV,是一种颜色编码方法,Y表示明亮度(Luminance.Luma),U和V则是色度.浓度(Chrominance.Chroma). YUV,Y`UV,YCbCr,YPbPr等都可以称为YUV,彼 ...

  5. YUV格式&像素

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

  6. 关于YUV格式数据

    (1) YUV格式有两大类:planar和packed.对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V.对于packed的YUV格式,每个像素点 ...

  7. 图文详解YUV420, yuv格式2

    YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...

  8. 【转】YUV格式&像素

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

  9. YUV格式具体解释

    YUV是指亮度參量和色度參量分开表示的像素格式,而这样分开的优点就是不但能够避免相互干扰,还能够减少色度的採样率而不会对图像质量影响太大.YUV是一个比較笼统地说法,针对它的详细排列方式,能够分为非常 ...

随机推荐

  1. c# datatable按主键合并相同主键返回新的datatable

    一.概述: 在python转c#时,python中pandas.merge可以按主键合并两个datatable,苦苦找了很久,希望c#也有同样的函数,未果,就自己写了一个,目前测试没问题,同样我也考虑 ...

  2. window注册表相关

    参考: https://baike.baidu.com/item/REG_EXPAND_SZ/9102962 一 注册表的相关概念 windows注册表相关api中名字起的比较混乱, 在这放一张从网上 ...

  3. ipython notebook 安装

    pip install IPython pip install urllib3 pip install jupyter pip install numpy pip install matplotlib ...

  4. mybatis入门篇:Mybatis注解方式的基本用法

    @Select 1.mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <! ...

  5. django rest framework serializer中获取request中user方法

    views.py   serializer = self.get_serializer(data=request.data, context={'request': request}) seriali ...

  6. https://www.oschina.net/project/lang/19/java

    https://www.oschina.net/project/lang/19/java

  7. 逆向工程vgenerator(三)

    前言 该项目的最后一篇博文,最终构建,写入文件,整体项目流程将在本片文章中写出. jdbcType /** *@author vvxtoys *mysql单位 -> jdbcType */ pa ...

  8. eclipse 安装MyBatis插件 -- 官网直接拖动“安装”

    拖动“安装” http://marketplace.eclipse.org/marketplace-client-intro?mpc_install=2947754

  9. websocket client code html

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. php弹出式登录窗口并获得登录后返回值

    一款bootstrap样式结合php制作的弹出式登录窗口,输入用户名和密码后,ajax传参给后台,并获得登录后返回值. hwLayer+ajax弹出登录框 $(function() { $('#for ...