多媒体基础知识之YUV数据

1.什么是YUV格式

YUV,是一种颜色编码方法。Y表示明亮度(Luminance、Luma),也就是灰度值。U和V则是色度、浓度(Chrominance、Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。

与RGB格式相比,RGB格式用红绿蓝三个颜色分量来表示一个像素,YUV则是用一个亮度分量(Y)加两个色度分量来表示一个像素。YUV也经常被称为YCbCr,Cb为蓝色色度分量,对应U;Cr为红色色度分量,对应V。

2.YUV格式采样方式

YUV采样方式主要描述像素Y、U、V分量采样比例,即表达每个像素时,Y、U、V分量的数目,通常有三种方式:YUV4:4:4,YUV4:2:2,YUV4:2:0。

用三个图直观地表示采集的方式,以黑点表示采样该像点的Y分量,以空心圆圈表示采用该像素点的UV分量。

YUV4:4:4采样,每一个Y对应一组UV分量;YUV4:2:2采样,每两个Y共用一组UV分量;YUV4:2:0采样,每四个Y共用一组UV分量。

4:4:4表示没有色度通道的压缩采样。

4:2:2表示2:1水平压缩采样,无垂直压缩采样。

4:2:0表示2:1水平压缩采样,2:1垂直压缩采样。

3.YUV格式的存储方式

YUV存储格式,主要描述像素的Y、U、V分量排列方式,分为两种格式:紧缩格式和平面格式。

紧缩格式(packed formats):将Y、U、V值储存成Macro Pixels阵列,和RGB的存放方式类似。每个像素点的Y,U,V是连续交差存储的。

这种YUV经常用在网络摄像机里,且大多是4:2:2的也就是只有在水平方向下采样。例如

UYVYUYVYUYVYUYVYUYVYUYVYUYVYUYVY

平面格式(planar formats):将Y、U、V的三个分量分别存放在不同的矩阵中。先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

planar的YUV是比较合适视频编码的一种格式。像下面这样的4x4的图像

YYYYYYYYYYYYYYYY UUUU VVVV

这个例子所示的YUV常被称为YUV420P,其水平和竖直方向上均为每两个亮度分量才有一个色度分量,也就是每四个Y才需要一个U和V。除这种水平和竖直方向的色度分量都下采样的4:2:0,还有只有水平方向下采样的4:2:2格式,以及没有下采样的4:4:4格式。

上面的例子是按Y、U、V(YCbCr)的顺序存储的,如果改为Y、V、U(YCrCb),则称为YV12格式。

Semi-planar格式

这是Planar和Packed两种格式的混合体:Y分量单独一个plane,U和V则交叉存储。这种YUV一般都是4:2:0的。例如:

YYYYYYYYYYYYYYYY UVUVUVUV

这个示例称为NV12格式。如果交换UV的顺序,就成了NV21格式。NV21是Android系统中摄像头预览图片的默认格式。

下面我用图的形式给出常见的YUV码流的存储方式,并在存储方式后面附有取样每个像素点的YUV数据的方法,其中,Cb、Cr的含义等同于U、V。

(1) YUYV 格式 (属于YUV422   Packed format

Byte Order. Each cell is one byte.

start + 0: Y’00 Cb00 Y’01 Cr00 Y’02 Cb01 Y’03 Cr01
start + 8: Y’10 Cb10 Y’11 Cr10 Y’12 Cb11 Y’13 Cr11
start + 16: Y’20 Cb20 Y’21 Cr20 Y’22 Cb21 Y’23 Cr21
start + 24: Y’30 Cb30 Y’31 Cr30 Y’32 Cb31 Y’33 Cr31

Color Sample Location

  0   1   2   3
0 Y C Y   Y C Y
1 Y C Y   Y C Y
2 Y C Y   Y C Y
3 Y C Y   Y C Y

Packed format with ? horizontal chroma resolution, also known as YUV 4:2:2

1/2水平色度分辨率采样的打包格式,也被称为YUV 4:2:2

In this format each four bytes is two pixels. Each four bytes is two Y’s, a Cb and a Cr. Each Y goes to one of the pixels, and the Cb and Cr belong to both pixels. As you can see, the Cr and Cb components have half the horizontal resolution of the Y component. V4L2_PIX_FMT_YUYV is known in the Windows environment as YUY2.

在这种格式中,每4个字节是两个像素,每4个字节上有两个Y分量,一个U和一个V分量。没个像素都有一个Y分量,两个像素共用一个U和一个V分量。

U和V分量在水平方向上的采样只有Y的一半,V4L2_PIX_FMT_YUYV在Windows环境中被称为YUY2。

(YUYV为YUV422采样的存储格式中的一种,相邻的两个Y共用其相邻的两个Cb、Cr,分析,对于像素点Y‘00、Y‘01 而言,其Cb、Cr的值均为 Cb00、Cr00,其他的像素点的YUV取值依次类推。)

(2) UYVY 格式 (属于YUV422   Packed format

Byte Order. Each cell is one byte.

start + 0: Cb00 Y’00 Cr00 Y’01 Cb01 Y’02 Cr01 Y’03
start + 8: Cb10 Y’10 Cr10 Y’11 Cb11 Y’12 Cr11 Y’13
start + 16: Cb20 Y’20 Cr20 Y’21 Cb21 Y’22 Cr21 Y’23
start + 24: Cb30 Y’30 Cr30 Y’31 Cb31 Y’32 Cr31 Y’33

Color Sample Location

  0   1 2   3
0 Y C Y Y C Y
1 Y C Y Y C Y
2 Y C Y Y C Y
3 Y C Y Y C Y

Variation of V4L2_PIX_FMT_YUYV with different order of samples in memory

UYVY格式也是YUV422采样的存储格式中的一种,只不过与YUYV不同的是UV的排列顺序不一样而已,还原其每个像素点的YUV值的方法与上面一样。

(3) YUV422P(属于YUV422 Planar format)

Byte Order. Each cell is one byte.

start + 0: Y’00 Y’01 Y’02 Y’03
start + 4: Y’10 Y’11 Y’12 Y’13
start + 8: Y’20 Y’21 Y’22 Y’23
start + 12: Y’30 Y’31 Y’32 Y’33
start + 16: Cb00 Cb01
start + 18: Cb10 Cb11
start + 20: Cb20 Cb21
start + 22: Cb30 Cb31
start + 24: Cr00 Cr01
start + 26: Cr10 Cr11
start + 28: Cr20 Cr21
start + 30: Cr30 Cr31

Color Sample Location

  0   1 2   3
0 Y C Y Y C Y
1 Y C Y Y C Y
2 Y C Y Y C Y
3 Y C Y Y C Y

Format with ? horizontal chroma resolution, also known as YUV 4:2:2. Planar layout as opposed to V4L2_PIX_FMT_YUYV

1/2水平色度分辨率采样,也称为YUV 4:2:2。 和V4L2_PIX_FMT_YUYV不同的是,它是平面布局的

This is a planar version of the YUYV format. The three components are separated into three sub-images or planes. The Y plane is first. The Y plane has one byte per pixel. The Cb plane immediately follows the Y plane in memory. The Cb plane is half the width of the Y plane (and of the image). Each Cb belongs to two pixels. For example, Cb0 belongs to Y’00, Y’01. Following the Cb plane is the Cr plane, just like the Cb plane.

这是YUYV格式的平面版本。 三个分量被分成三个子图像或平面,分别存放在三个不同的矩阵中。 首先存放Y分量。 每一个像素都有一个Y分量。 Cb分量紧跟着Y分量存储。 Cb分量是Y分量的宽度的一半。 每个Cb分量属于两个像素。 例如,Cb0属于Y‘00,Y‘01。 Cb分量之后是Cr分量,它和Cb分量一样。

(YUV422P也属于YUV422的一种,它是一种Planar模式,即平面模式,并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的U(Cb)分量,最后存储所有的V(Cr)分量,如上图所示。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y‘00、Y‘01 而言,其Cb、Cr的值均为 Cb00、Cr00)

(4)YV12,YU12格式(属于YUV420 planar format)

Byte Order. Each cell is one byte.

start + 0: Y’00 Y’01 Y’02 Y’03
start + 4: Y’10 Y’11 Y’12 Y’13
start + 8: Y’20 Y’21 Y’22 Y’23
start + 12: Y’30 Y’31 Y’32 Y’33
start + 16: Cr00 Cr01
start + 18: Cr10 Cr11
start + 20: Cb00 Cb01
start + 22: Cb10 Cb11

Color Sample Location

  0   1   2   3
0 Y   Y   Y   Y
    C       C  
1 Y   Y   Y   Y
 
2 Y   Y   Y   Y
    C       C  
3 Y   Y   Y   Y

V4L2_PIX_FMT_YUV420 Planar formats with ? horizontal and vertical chroma resolution, also known as YUV 4:2:0

V4L2_PIX_FMT_YUV420是1/2水平和垂直色度分辨率采样的平面格式,也称为YUV 4:2:0

V4L2_PIX_FMT_YVU420 (‘YV12’) and  V4L2_PIX_FMT_YUV420 (‘YU12’) are planar formats, as opposed to a packed format. The three components are separated into three sub- images or planes. The Y plane is first. The Y plane has one byte per pixel. For V4L2_PIX_FMT_YVU420, the Cr plane immediately follows the Y plane in memory. The Cr plane is half the width and half the height of the Y plane (and of the image). Each Cr belongs to four pixels, a two-by-two square of the image. For example, Cr0 belongs to Y’00, Y’01, Y’10, and Y’11. Following the Cr plane is the Cb plane, just like the Cr plane. V4L2_PIX_FMT_YUV420 is the same except the Cb plane comes first, then the Cr plane.

V4L2_PIX_FMT_YVU420 (‘YV12’) 和 V4L2_PIX_FMT_YUV420 (‘YU12’),是planar模式, 三个分量被分成三个子图像或平面,分别存放在三个不同的矩阵中。首先存放Y分量。 每一个像素都有一个Y分量,对于V4L2_PIX_FMT_YVU420格式,Cr分量紧跟着Y分量存储Cr分量的长度和宽度各是Y分量的一半,每个Cr分量属于4个像素(一个2x2的图像)例如,Cr0属于Y‘00,Y‘01,Y‘10和Y‘11。 Cr分量之后是Cb分量,它和Cr分量一样。V4L2_PIX_FMT_YUV420和V4L2_PIX_FMT_YVU420是相同的,只是在存储方式上Cb分量在前,然后是Cr分量。

(YU12和YV12属于YUV420格式,也是一种Planar模式,将Y、U、V分量分别打包,依次存储。其每一个像素点的YUV数据提取遵循YUV420格式的提取方式,即4个Y分量共用一组UV。注意,上图中,Y‘00、Y‘01、Y‘10、Y‘11共用Cr00、Cb00,其他依次类推。)

(5)NV12、NV21(属于YUV420)

Byte Order. Each cell is one byte.

start + 0: Y’00 Y’01 Y’02 Y’03
start + 4: Y’10 Y’11 Y’12 Y’13
start + 8: Y’20 Y’21 Y’22 Y’23
start + 12: Y’30 Y’31 Y’32 Y’33
start + 16: Cb00 Cr00 Cb01 Cr01
start + 20: Cb10 Cr10 Cb11 Cr11

Color Sample Location

  0   1 2   3
0 Y   Y Y   Y
    C     C  
1 Y   Y Y   Y
 
2 Y   Y Y   Y
    C     C  
3 Y   Y Y   Y

V4L2_PIX_FMT_NV21 Formats with ? horizontal and vertical chroma resolution, also known as YUV 4:2:0. One luminance and one chrominance plane with alternating chroma samples as opposed to V4L2_PIX_FMT_YVU420

V4L2_PIX_FMT_NV21是是1/2水平和垂直色度分辨率采样的平面格式,也称为YUV 4:2:0。与V4L2_PIX_FMT_YVU420不同的是,它具有交替的色度采样(即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane)

V4L2_PIX_FMT_NV12 (‘NV12’) and V4L2_PIX_FMT_NV21 (‘NV21’) are two-plane versions of the YUV 4:2:0 format. The three components are separated into two sub-images or planes. The Y plane is first. The Y plane has one byte per pixel. For V4L2_PIX_FMT_NV12, a combined CbCr plane immediately follows the Y plane in memory. The CbCr plane is the same width, in bytes, as the Y plane (and of the image), but is half as tall in pixels. Each CbCr pair belongs to four pixels. For example, Cb0/Cr0 belongs to Y’00, Y’01, Y’10, Y’11. V4L2_PIX_FMT_NV21 is the same except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte.

V4L2_PIX_FMT_NV12(‘NV12‘)和V4L2_PIX_FMT_NV21(‘NV21‘)是 YUV 4:2:0 的 two-plane 版, 三个分量分成两个子图像或平面。首先存放Y分量。 每一个像素都有一个Y分量 ,对于V4L2_PIX_FMT_NV12格式,组合的CbCr分量紧跟着Y分量存储。 CbCr分量与Y分量宽度相同(以字节为单位),但是像素的高度是Y分量的一半。 每个CbCr对都属于四个像素。 例如,Cb0 / Cr0属于Y‘00,Y‘01,Y‘10,Y‘11。 除了Cb和Cr字节被交换之外,V4L2_PIX_FMT_NV21是相同的,CrCb分量以Cr字节开头。

(NV12和NV21属于YUV420格式,是一种two-plane(Semi-planar)模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane。其提取方式与上一种类似,即Y‘00、Y‘01、Y‘10、Y‘11共用Cr00、Cb00)

参考:

https://linuxtv.org/downloads/v4l-dvb-apis-new/uapi/v4l/yuv-formats.html

http://wenzongliang.iteye.com/blog/1902608

时间: 2024-10-08 19:35:02

多媒体基础知识之YUV数据的相关文章

多媒体基础知识之PCM数据

1.什么是PCM音频数据 PCM(Pulse Code Modulation)也被称为脉冲编码调制.PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样.量化.编码转换成的标准的数字音频数据. 2.PCM音频数据是如何存储的 如果是单声道的音频文件,采样数据按时间的先后顺序依次存入(有的时候也会采用LRLRLR方式存储,只是另一个声道的数据为0),如果是双声道的话就按照LRLRLR的方式存储,存储的时候还和机器的大小端有关.大端模式如下图所示: 3.PCM音频数据中常用的专业术语

第二篇 python基础知识总结:数据、运算符

引子 我们跟任何人交流,说的每一句都是都一些文字组成,包含名词.动词.语句.标点符号等,组成我们说普通话构成的基本要素.同理我们学习python语言也要明白这些基本要素,也就是我们常说的基本语法,这是我们必须掌握的基础知识.下面我就根据我们常用的知识总结一下.对此内容不过多的讲解!我们需要的是多练!坚持练!反复练!着重强调! 一 变量与常量 任何一门计算机语言中,变量与常量都是首先要了解的最基础知识.变量就是变化的量,常量就是一个不变的量,一个常数.python语言中的变量不指定存储类型,这点与

六、多媒体基础知识

多媒体:对多种媒体的融合,能够同时采集.处理编辑.存储.展示2个及以上不同类型信息媒体的技术.这些信息媒体包括:文字.声音.图形.图像.动画.活动影像…… 1.多媒体的基本概念 2.声音 3.图形和图像 4.动画和视频 5.多媒体网络 6.多媒体计算机系统

数据通信的基础知识

数据通信的基础知识 典型的数据通信模型: 相关术语 通信的目的是传送消息. 数据(data)--运送消息的实体: 信号(signal)--数据的电气或电磁的表现: "数字信号"--代表消息的参数的取值是离散的: "模拟信号"--代表消息的参数的取值是连续的: 码元(code)--在使用时间域的波形标识数字信号时,则代表不同离散数值的基本波形就形成了码元: 在数字通信中常常使用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为二进制码元.而这个间隔被称

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简

SQL server基础知识(表操作、数据约束、多表链接查询)

SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database 数据库名称 查询:select name from master..sysdatabases 修改:alter database 数据库名称(在 sql server 中修改与数据库关联的文件和文件组.在数据库中添加或删除文件和文件组.更改数据库或其文件和文件组的属性) (3).管理表 选择数据库:use 数

Wireshark数据抓包教程之Wireshark的基础知识

Wireshark数据抓包教程之Wireshark的基础知识 Wireshark的基础知识 在这个网络信息时代里,计算机安全始终是一个让人揪心的问题,网络安全则有过之而无不及.Wireshark作为国际知名的网络数据抓包和分析工具,可以广泛地应用各种领域,尤其是网络安全领域.借助Wireshark,网络安全工程师可以快速的从数据抓包中找出各种潜在的安全问题.本章将详细讲解Wireshark的简单使用. Wireshark简介 Wireshark(前称Ethereal)是一个网络封包分析软件.网络

iOS开发基础知识之数据下载

1数据下载 简介: (1)在本文中笔者将给大家带来一些网络基础知识的介绍,NSURLConnection从网络上下载数据的方式,以及如何利用利用同步,异步下载显示图片和数据. 1网络基础知识 什么是网络应用? 1 网络应用软件是用户利用软件开发平台,按照各自需要开发的各种各样的网上业务应用系统.常见的开发平台有各种数据库管理系统.办公自动化管理系统以及浏览器.网页制作网站管理等软件. 2客户端与服务端 网络应用不同于本地应用, 网络应用的数据是从网络上下载下来的, 所以需要在网络上运行一个程序为

学习大数据要什么基础知识?学到什么程度才能从事大数据行业?

因为大数据前景好,薪资高,很多人想通过参加学习大数据,然后进入大数据行业发展.但是因为大数据的门槛较高,对于学习人员有一定的要求,那么学习大数据需要什么基础知识呢? 首先我们了解下对于大数据学习者本身的学历水平的要求 目前大多数的机构,对于大数据学习者要求必须是大专学历以上,而且大专学历还要求是计算机相关专业的,如果是本科及本科以上的,则对专业要求适当的放宽.同时大数据分为两大方向:大数据开发和大数据分析. 这两大方向的对于基础知识的要求不同,大数据分析偏向于分析,对于编程要求不高,相较而言对于