对一种颜色进行编码的方法统称为"颜色空间"或"色域",RGB和YUV,都是颜色空间的种类,

Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠

分量视频信号(色差信号),通常采用YCbCr和YPbPr两种标识,

YUV(YCbCr)是525i/625i(480i/576i)隔行分量输入接口

YPbPr是从480i到720p的分量输入接口标准(不区分隔行和逐行),隔行分量端子和逐行分量端子共用,端子标识为YPbPr,无论隔行还是逐行分量信号都从这个端口输入。

Y'PbPr是为了满足高质量视频传输而设计的色彩分量形式及接口形式,采用并行传输的方式。PbPr也是由B'-Y'及R'-Y'经过限幅得到的,目前,这种接口多见于模拟分量录像机、高清摄录一体机及DVD播放机等。模拟分量传输绕过了PAL编码与解码,减轻了亮/色串扰等编解码对图像的损失,但传输距离受到限制。

Y'CbCr是数字电视标准化时,为了兼容亮度、色差这种色彩编码方式而采用的一种类似于Y'PbPr的分量形式。

YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL)。YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。与RGB视频信号传输相比,它最大的优点在于只需占用极少的带宽(RGB要求三个独立的视频信号同时传输)。

其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;

而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

“亮度”是通过RGB输入信号来创建的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面—色调与饱和度,分别用Cr和CB来表示。其中,Cr反映了GB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异; YUV经常有另外的名字,YCbCr ,其中Y与YUV 中的Y含义一致,Cb , Cr同样都指色彩,,只是在表示方法上不同而已,Cb Cr 就是本来理论上的“分量/色差”的标识。C代表分量(是component的缩写)Cr、Cb分别对应r(红)、b(蓝)分量信号,Y除了g(绿)分量信号,还叠加了亮度信号。

以下是标准公式

RGB 转换成 YUV

Y      = (0.257 * R) + (0.504 * G) + (0.098 * B) +16

Cr    = V =(0.439 * R) -  (0.368 * G) - (0.071 * B) +128

Cb   = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

YUV 转换成 RGB

B =1.164(Y - 16) + 2.018(U - 128)

G =1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)

R =1.164(Y - 16) + 1.596(V - 128)

RGB取值范围均为0~255,Y=0~255,U=-122~+122,V=-157~+157

以下是经过简化的公式,运算量比上述公式要小一些。

RGB转YUV

Y =0.299R + 0.587G + 0.114B

U'=(BY)*0.565

V'=(RY)*0.713

YUV转RGB

R = Y+ 1.403V'

G = Y- 0.344U' - 0.714V'

B = Y+ 1.770U'

YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0;

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

先记住下面这段话,以后提取每个像素的YUV分量会用到。

YUV4:4:4采样,每一个Y对应一组UV分量

YUV4:2:2采样,每两个Y共用一组UV分量

YUV4:2:0采样,每四个Y共用一组UV分量

4:4:4 表示色度值(UV)没有减少采样。即Y,U,V各占一个字节,加上Alpha通道一个字节,总共占4字节.这个格式其实就是24bpp的RGB格式了。

4:2:2 表示UV分量采样减半,比如第一个像素采样Y,U,第二个像素采样Y,V,依次类推,这样每个点占用2个字节.二个像素组成一个宏像素.

4:2:0  这种采样并不意味着只有Y,Cb而没有Cr分量,这里的0说的U,V分量隔行才采样一次。比如第一行采样 4:2:0 ,第二行采样 4:0:2 ,依次类推...在这种采样方式下,每一个像素占用16bits或10bits空间.

4:1:1 可以参考4:2:2分量,是进一步压缩,每隔四个点才采一次U和V分量。一般是第0点采Y,U,第1点采Y,第3点采YV,第四点采Y,依次类推。

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

YUYV格式

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

UYVY格式

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

YUV422P格式

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

YV12,YU12 格式

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

NV12,NV21格式

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

I420格式

I420就是YUV420P格式;存储方式参考YUV422P;

一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Bit。

在采集到RGB24数据后,需要对这个格式的数据进行第一次压缩。即将图像的颜色空间由RGB2YUV。因为,X264在进行编码的时候需要标准的YUV(4:2:0)。但是这里需要注意的是,虽然YV12也是(4:2:0),但是YV12和I420的却是不同的,在存储空间上面有些区别。如下:

YV12:亮度(行×列)+U(行×列/4) +V(行×列/4)

I420:亮度(行×列)+V(行×列/4) +U(行×列/4)

可以看出,YV12和I420基本上是一样的,就是UV的顺序不同。

YUV420 planar数据,以720×488大小图象YUV420 planar为例,其存储格式是:共大小为(720×480×3>>1)字节,

分为三个部分:Y,U和V

Y分量:    (720×480)个字节

U(Cb)分量:(720×480>>2)个字节

V(Cr)分量:(720×480>>2)个字节

三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。即YUV数据的

0 - 720×480字节是Y分量值,

720×480 - 720×480×5/4字节是U分量

720×480×5/4 - 720×480×3/2字节是V分量。

4:2:2 和4:2:0 转换:

最简单的方式:

YUV4:2:2 --->YUV4:2:0  Y不变,将U和V信号值在行(垂直方向)在进行一次隔行抽样。 YUV4:2:0 --->YUV4:2:2  Y不变,将U和V信号值的每一行分别拷贝一份形成连续两行数据。

YCrCb与YPrPb的含义与区别相关推荐

  1. ycrcb各分量含义_YCrCb与YPrPb的含义与区别

    对一种颜色进行编码的方法统称为"颜色空间"或"色域",RGB和YUV,都是颜色空间的种类, Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YU ...

  2. 架构,框架,模式,模块、组件、插件的含义和区别

    架构.框架.模式.模块.组件.插件.控件.中间件的含义和区别.经常看到这些概念,但是有些含糊,花点儿功夫整理一下,结果还是有些地方理解的不透彻,先将整理的内容写下来,以供交流.左侧英文栏中有些单词被分 ...

  3. mysql某个表被行锁了_MySQL 行锁和表锁的含义及区别详解

    一.前言 对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对MySQL中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答. MySQL常用引擎有MyISAM和Inno ...

  4. 云计算中laaS,PaaS和SaaS的含义及区别

    laaS,PaaS和SaaS的含义及区别 SaaS: Software-as-a-Service(软件即服务)提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界 ...

  5. Benchmark和Baseline的含义与区别

    Benchmark和Baseline的含义与区别 原文地址:https://www.zhihu.com/question/28823373 Benchmark和baseline都有性能比较的意思. 先 ...

  6. char,varchar,nchar,nvarchar具体含义和区别

    char,varchar,nchar,nvarchar具体含义和区别 他们都是在创建数据库的时候,当你想要定义一个String 类型的数据时一般都是用上面四种类型定义. char类型 ​ 它是固定长度 ...

  7. 关于、、的含义及区别

    本文主要介绍Java运算符>.>>.>>>三者的含义及区别 1.>:表示大于(是一种比较运算符),比较两者大小,返回值为boolean类型.如 5>6值 ...

  8. B、dB、dBm、dBi、dBd、dBc的含义与区别

    B.dB.dBm.dBi.dBd.dBc的含义与区别 贝尔(B) 贝尔(B)最初用于表示音量功率10与1的比值,亚历山大.格拉汉姆.贝尔的名字命名.因此,1B表示功率比10:1,这是一种对数的关系,底 ...

  9. dB HL与dB SPL含义与区别

    dB HL与dB SPL含义与区别 转载▼ 1.大家知道,分贝是用来表示声音强度大小的单位,在物理声学上,它是以测量点的声压P除以基准声压Pr,然后通过对数计算得出的,即: 其中"SPL&q ...

最新文章

  1. 修复 Vista 下 Live Messenger 联系人列表混乱
  2. 134安装教程_PS教程连载第135课:PS第三方插件安装方法
  3. ab压力测试: apr_socket_recv: Connection timed out (110)
  4. setInterval和setTimeout的区别
  5. selenium在页面中多个fream的定位
  6. 、PHP只能访问mysql_php中 mysql函数不能调用,只有mysql_query()可以用
  7. java 绘图 渐变_如何在Java 2D中创建渐变绘画?
  8. 如何自行查找SAP ERP的物料主数据和CRM产品主数据的映射关系
  9. 什么是心跳线?心跳线,主要用于主从服务器之间,是连接工作机与备份机的网线
  10. 大咖来信 | 轮值董事长徐直军,复盘华为AI战略出台始末
  11. SSD物体检测模型Keras版
  12. 值类型和引用类型 区别
  13. 网页右侧在线客服html,漂浮在网页右侧的QQ在线客服代码? 1、怎么样修改以下代码,让其变为最靠右边2、如何插入到网页当中...
  14. JS实现二叉树添加节点,删除节点操作
  15. 使用Centos7部署静态网站
  16. 面向对象学习笔记——封装、继承、多态
  17. 二十四节气-冬至,海报/文案分享,一口饺子,一口吉。
  18. 重构碎片化知识_《碎片化与重构》之如何整合知识碎片
  19. 一款基于SpringBoot+layui 开源的固定设备资产管理系统源码 源码免费分享
  20. linux如何改变光标的样子,如何更改光标及其大小?

热门文章

  1. 211计算机实力末尾的学校,实力最弱的十所985大学是哪几所?选择末尾985好还是选211好?...
  2. 设计模式的征途—3.工厂方法(Factory Method)模式
  3. HNOI2015 实验比较
  4. ffplay的快捷键以及选项
  5. 【原创】构建高性能ASP.NET站点 开篇
  6. 被绞杀的网景:互联网门口第一滴血,互联网营销
  7. Flex 3调试Flash Player 10完美解决
  8. 中嵌协会 第1期“嵌入式与物联网”主题论坛将于2010年6月26日在中关村软件园举行...
  9. 基于RBAC的权限设计
  10. c++调用cplex求解例子_递归算法的R语言实现 (罗汉塔、九连环、斐波那契数列等问题的求解)...