版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/coloriy/article/details/6668447

MPEG 储存的 YU(Cb)V(Cr) 格式是遵循 CCIR601,也就是 ITU-R BT.601 的规范,Y 亮度的范围是 16~235,UV(CbCr) 色度是以无色 =128 为中心,范围是 16~240。 
一般民生消费产品使用的 MPEG 压缩,大都采用 YUV 4:2:0 的格式,也就是如果分办率是 720x576,则每个 Frame,Y 有 720x576 个点,U 只有 360x288 个点,V 也只有 360x288 个点。色度的信息只有亮度的 1/4。那么为什么不写 YUV 4:1:1(UV 和 Y 的比例是 1:4) 而要写 YUV 4:2:0?这是因为要区分取样的方式不同。YUV 4:1:1 是指水平 Y 取样四个点,UV 各只取样一个点,水平的 Y 和 UV 的取样比例是 4:1,也就是 
Y Y Y Y 一个 U 一个 V ....

YUV 4:2:0 是指水平和垂直 Y 各取样两个点,UV 各只取样一个点,水平的取样比例是 2:1,重直的取样比例 2:1,也就是 
Y Y 
Y Y 一个 U 一个 V ....

和 YUV 4:1:1 一样,色度和亮度差 1/2 * 1/2 = 1/4,只是取样的方式不同。

而 MPEG 最常采用的 YUV 4:2:0 格式,其 UV 的取样位置,MPEG-1 和 MPEG-2 又不同(MPEG-4 是用和 MPEG-2 一样的取样位置) 
MPEG-1 
Y Y 
_x 
Y Y

x 是 UV 的取样位置

MPEG-2 
Y Y 

Y Y

x 是 UV 的取样位置


通常我们用RGB表示一种彩色。计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色。
而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像机来存放两种图像数据。
所以为了兼容两种电视机,专家就引入YUV格式代替RGB,其中Y表示亮度, U和V表示色差。 黑白电视机只用Y信号, 而彩色电视机可由YUV转换成RGB再显示颜色。

通常我们所用的YUV格式是 ITU-R 的标准 , 也叫YCbCr.

YUV是由RGB格式的数据转换得来。

  1. Y Y = 0.299 x R + 0.587 x G + 0.114 x B + 0
  2. U Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128
  3. V Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128
  4.  
  5. Y Y = 0.299 x R + 0.587 x G + 0.114 x B + 0
  6. U Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128
  7. V Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128

///////
YUV4:4:4 
其实就是YUV的数据各占用8位, 每个像素都由YUV组成

  1. 同一行的相邻4个像素数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3
  2. 存储时: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3 //即每个像素YUV的数据都会存放起来
  3. 为什么叫4:4:4 , 意思就是4个像素里的数据有4Y 4U, 4V

//////
YUV4:2:2
其实绝大部分相邻的两个像素,数据差异应不大。所以为了节点空间便于存储,丢失每个像素的部分数据。
专家研究表明我们人对亮度比较敏感,而对色彩不怎么敏感。所以每个像素的亮度Y数据是绝对不动的,而色差数据可以进行丢弃。

  1. 同一行的相邻4个像素数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3
  2. 存储时: Y0 U0 Y1 V1 Y2 U2 Y3 V3 // 每两个相邻的像素, 一个丢弃V数据,一个丢弃U数据
  3. 为什么叫4:2:2, 意思就是相邻的4个像素里有4Y 2U 2V 按上面存储的顺序也叫YUYV.
  4.  
  5. 但还原成RGB数据必须需要YUV, 像第一个像素只有Y0U0是没法还原的,这时只能用下一像素的V1数据。
  6. 还原时的YUV [Y0U0V1] [Y1U0V1] [Y2U2V3] [Y3U2V3] //这样还原理论上会对图像的质量有影响的,但我们看不出来的.

/////
YUV4:2:0
专家们进一步研究表示,每一行的相邻两个像素与下一行同位置的两个像素数据差异不大,可以进一步的丢数据。

  1. 如两行的像素数据:
  2. Y00U00V00 Y01U01V01 Y02U02V02 Y03U03V03 ....
  3. Y88U88V88 Y89U89V89 Y90U90V90 Y91U91V91 ....
  4.  
  5. 存储时: Y00U00 Y01 Y02U02 Y03 //每个像素的Y数据保留, 两个像素数据只保留一个U数据。这一行不保留V数据(YUV: 420)
  6. Y88V88 Y89 Y90V90 Y91 // .... 两个像素数据只保留一个V数据, 这行不保留U数据(YUV: 402)
  7.  
  8. 还原时只能相同位置的上下两行4个像素结合还原:
  9. Y00U00V88 Y01U00V88 Y02U02V90 Y03U02V90
  10. Y88U00V88 Y89U00V88 Y90U02V90 Y91U02V90

yuv数据还分成打包的,平面的。 打包的意思是: yuv数据是顺序存放Y,接着U,再接着V数据存放。 平面的意思是: yuv数据是分成三个地方存放, 一个地方只存Y数据, 一个只存U数据, 一个只存V数据

 
 

YUV 4:2:0 格式和YUV411格式区别的更多相关文章

  1. 快速了解yuv4:4:4 yuv4:2:2 yuv 4:1:1 yuv 4:2:0四种YUV格式区别

    四种YUV格式区别如下: 1.YUV  4:4:4抽样方式: Y: Y0 Y1 Y2 Y3 U: U0 U1 U2 U3 V: V0 V1 V2 V3 2.YUV   4:2:2抽样方式: Y   : ...

  2. YUV格式与RGB格式

    YUV420介绍: YUV420格式是指,每个像素都保留一个Y(亮度)分量,而在水平方向上,不是每行都取U和V分量,而是一行只取U分量,则其接着一行就只取V分量,以此重复(即4:2:0, 4:0:2, ...

  3. C#5.0支持的await格式

    C#5.0支持的await格式 C#5.0引入了编译器支持的 async 和 await 关键字,这就为开发者提供了使用同步思想写异步代码的方便. 但是有些传统函数仅提供了异步回调实现,如何对其封装, ...

  4. RSA密钥之C#格式与Java格式转换

    前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...

  5. TLV格式是什么格式

    TLV 格式是什么格式 一种可变格式, TLV 的意思就是: Type 类型, Lenght 长度, Value 值: Type 和 Length 的长度固定,一般那是 2 . 4 个字节: Valu ...

  6. js中日期格式与时间戳格式互换

    2014-04-23 18:55:49:123    日期格式 1398250549123        时间戳格式 前台显示日期格式,则 function tsToTime(ts) { var da ...

  7. H.264流媒体协议格式中的Annex B格式和AVCC格式深度解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Romantic_Energy/article/details/50508332本文需要读者对H.26 ...

  8. 以太网帧格式、IP数据报格式、TCP段格式+UDP段格式 详解

    转载:http://www.cnblogs.com/lifan3a/articles/6649970.html 以太网帧格式.IP数据报格式.TCP段格式+UDP段格式 详解   1.ISO开放系统有 ...

  9. 【转】如何将FLAC格式转为MP3格式

    原文网址:http://jingyan.baidu.com/ae/3aed632e65708470108091ca.html FLAC全称为无损音频压缩编码,FLAC格式又称无损格式 不会破坏原有的音 ...

随机推荐

  1. Flask之数据库设置

    4 数据库 知识点 Flask-SQLALchemy安装 连接数据库 使用数据库 数据库迁移 邮件扩展 4.1 数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在 ...

  2. php协程

    多任务 (并行和并发) 在讲协程之前,先谈谈多进程.多线程.并行和并发. 对于单核处理器,多进程实现多任务的原理是让操作系统给一个任务每次分配一定的 CPU 时间片,然后中断.让下一个任务执行一定的时 ...

  3. 性能测试十八:jmeter分布式

    一台压力机产生得压力是有限的,尤其是jmeter,java本来性能就不是很好,并发特别多的时候,jmeter的性能会急剧下降,正常的接口,若单台压力机,超过1000并发以后,jmeter的性能就不怎么 ...

  4. python接口自动化测试二十二:文件下载

    文件下载类型: Content-Type: octets/stream   一般为文件类型:

  5. python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)

    一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...

  6. SPFILEOPENBANKDB.ORA 手动编辑产生问题

    因为最近启动后发现经常内存高占用,一个ORACLE实例占用超过7G内存,两个就15G,卡的让人坐立不安.于是百度了一下,使用下面的命令将sga_max_size从7G修改为200M show para ...

  7. Mysql 模糊匹配(字符串str中是否包含子字符串substr)

    1.LIKE 通常与 % 一同使用,类似于一个元字符的搜索.若substr不在str中,则返回0. 2.INSTR(str,substr) 返回字符串 str 中子字符串的第一次出现位置.若subst ...

  8. 037 关于pom.xml的一些问题的理解

    最近在pom上出了一些问题,搞了一天才理解了一些问题,记录一下. 当在覆盖本地repository包之后,pom.xml上面出现了一个x. 当mvn->update project之后,还是有许 ...

  9. input禁止输入空格

    <input name="" onkeyup="this.value=this.value.replace(/^\s+|\s+$/g,'')" value ...

  10. <script type="text/x-template"> 模板

    获取动态的js模板可以用art-template插件 <script type="text/template"> 给<script>设置type=" ...