何为YUV

RGB相信大家都明白是什么,也知道怎么用RGB来表示一个颜色。YUV也可以用来表示颜色,可以从RGB中得到,为得是使得亮度跟颜色分开,这样可以兼容黑白电视(只需显示Y的程度)。现代采像一般是把采集的图像信号经分色、分别放大后得到RGB,再经过矩阵转换电路取得亮度信号Y和两个色差信号R-Y(U)、B-Y(V),最后发送端将亮度和发送端三个信号分别进行编码,用同一信道发出去。YUV也是分别需要1个字节来表示Y、U、V,但是可以方便减少采样而使得画质不会太大受损,这样可以大大的减少存储空间。

YUV中的Y

Y表示明亮度(Luminance或者luma),也叫做灰阶值,用来表示黑白的程度。这个值是透过RGB的信号来建立的,方法是将RGB的特定信号叠加在一起,转换公式稍后会说。

YUV中的UV

UV代表色度值(chrominance/chroma),是构成彩色的两个分量。用于描述图片的色彩和饱和度,用于指定像素的颜色。U值也叫做Cr值,反映了RGB输入值的红色部分与RGB信号亮度值之间的差异。V值也叫做Cb值,反映了RGB输入值的蓝色部分与RGB信号亮度之间的差异。

饱和度

饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。纯的颜色都是高度饱和的,如鲜红,鲜绿。混杂上白色,灰色或其他色调的颜色,是不饱和的颜色,如绛紫,粉红,黄褐等。完全不饱和的颜色根本没有色调,如黑白之间的各种灰色

HSB

H(色相):光的波长

S(饱和度):颜色的纯度,比如红色,255,0,0为最纯。如果饱和度设置为50%,那么就变成255,128,128。

B(亮度):物体表面的反光率。比如:亮红是 255,0,0。如果亮度设置为50%,那么就变成 128,0,0.

YUV采样

4:4:4 采样

YUV三个信道抽样率相同,因此在生成的图像里,每个像素三个分量信息完整,经过8比特量化后,未经压缩占用3字节。例如:

四个像素为:[Y0 U0 V0][Y1 U1 V1][Y1 U1 V1][Y1 U1 V1]

存放的码流为:

Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

映射的像素点为:[Y0 U0 V0][Y1 U1 V1][Y2 U2 V2][Y3 U3 V3]

4:2:2采样

并不意味着只有Y、Cb而没有Cr分量。它指的是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储,它指的是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0和话,下一行就是4:0:2,再下一行是4:2:0….,以此类推。例如:

八个像素为:[Y0 U0 V0][Y1 U1 V1][Y2 U2 V2][Y3 U3 V3][Y5 U5 V5][Y6 U6 V6][Y7 U7 V7][Y8 U8 V8]

存储的码流为(YUVY,packed格式):

Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8

映射出的像素点为:[Y0 U0 V5][Y1 U0 V5][Y2 U2 V7][Y3 U2 V7][Y5 U0 V5][Y6 U0 V5][Y7 U2 V7][Y8 U2 V7]

YUV的存储格式

通常有两大类:打包格式(packed)和平面格式(planar),前者将YUV分量存放在同个数组中,通常是几个相邻的像素组成一个宏像素;后者使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。

YUV422 Plannar

YUV422 Semi-Planar(半平面格式)

NV12(UV)和NV21(VU)属于YUV420格式,是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane

YUV422 interleaved (packed模式)

4、YUV420 Plannar(YV12,YU12)

问答:

YUV 420数据为什么能省下内存

表示4组Y对应1组UV。

以 720x480的YUV图像为例子,解释一下数据存储格式。

720x480如果是RGB格式存储,R、G、B分别对应一个字节。所以需要 720*480*3个字节。

如果是yuv 420存储格式 4组y共用一组uv(共用的U是第一行第一个像素的U,V是第二行第二个像素的V)。 y占用一个字节,u占用一个字节,v占用一个字节。

下面这个图经常误导人。下面这个图并不是像素的排列方式。注意不是像素的排列方式。一个像素是会同时显示Y以及UV的。下面这个图只是为了说明四个Y对应一个UV。说明亮度、色度的采样模式。四个像素共用的U是第一行第一个像素的U,V是第二行第二个像素的V。

无论怎样yuv的格式如何,一个像素依然是要由一个Y(一个字节),U(一个字节)、V(一个字节来显示)来表示。 420的格式是说 隔壁的四个像素分别有4个y,然后要用的U跟V是同一样的数据。 这样4个像素占用的内存就由以前的 4*3 (RGB)个字节变为。4个Y字节+1个UV字节就能表示。平均下来就是一个像素占用 8(一个Y一个字节)+ 16(U+V)/4 = 12位。

所以420能比RGB剩下很多存储空间。

YUV 420的存储格式

YUV的存储格式分为打包(packed)格式和平面(planar)格式

YUV420P是平面格式,分为I420和YV12。他们之间有什么不同?

I420格式(YUV的标准格式)和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。

I420: YYYYYYYY UU VV =>YUV420P

YV12: YYYYYYYY VV UU =>YUV420P

NV12跟NV21有什么区别

NV12根NV21都是420的半平面格式,他们的区别只是在于U和V的存储顺序不一致

NV12: YYYYYYYY UVUV =>YUV420SP

NV21: YYYYYYYY VUVU =>YUV420SP

yuv420p 详解_YUV格式介绍相关推荐

  1. ubuntu 文件权限命令详解使用格式和方法

    为什么80%的码农都做不了架构师?>>>    在 Ubuntu Linux 中用源码文件安装软件时经常都会用到chmod命令来更改文件的权限使其在安装时有执行的权限.由于 Ubun ...

  2. 备份数据库的expdp语句_Oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍...

    oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍 目 录 1 Oracle数据泵的介绍 3 2 Oracle expdp/impdp参数使用介绍 3 2.1 Or ...

  3. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...

  4. HDMI ARC功能详解及应用介绍

    HDMI ARC功能详解及应用介绍 HDMI ARC,专注于音频传输的方案 ARC的全称为Audio Return Channel,顾名思义也就是音频回传通道.ARC出现的目的,是使整个数字化家电在线 ...

  5. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  6. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

  7. chmod命令详解使用格式和方法

    Linux系统中文件调用的权限分为三级:文件拥有者(u).群组(g).其他(o).用chmod就可以更改文件的权限.chmod是一个相当灵活的命令,对同一个文件的权限的修改可以用多种风格的命令格式来实 ...

  8. Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景 附加功能 数据的清理或添加: 函数参数类型验证 @require_ints 类似请求前拦截 数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改 为函数提供额外的数据 ...

  9. Bert代码详解及模型介绍

    前言 写在前边:很多东西我也仅仅是一知半解,仅仅记录学习过程,个人观点,还需要看大量的代码.必须要耐住性子看代码,别无他法,看的多了自然就会了. 因为个人不用tensorflow,so这是bert的p ...

  10. Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解

    http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...

最新文章

  1. spring cloud微服务治理eureka、hystrix、zuul代码例子
  2. php判断是否已关注,php判断用户是否关注微信订阅号或公众号
  3. ae 创建图像等高线 蒙版_Pixelmator ——图像处理软件
  4. BlockingQueue阻塞队列
  5. 这个数学问题,打一局台球就解决了
  6. ios 从assets加载图片_iOS 使用Assets.xcassets添加启动图和Icon
  7. 互联网时代 手机商务应用为王
  8. 微波网络归一化转移矩阵[a]导出散射矩阵[S]
  9. Js获取处理日期时间
  10. VPC中安装Windows Server 2008
  11. Linux如何增大、缩小swap分区
  12. Bayesian framework 贝叶斯框架 (R)
  13. python海龟绘图颜色_Python:海龟绘图(六)——来点颜色看看
  14. 如何使用百数扫码实现高效信息录入与查询
  15. 【网络与系统安全实验】网络扫描与防御技术
  16. iframe不能显示内容的问题
  17. Pr 从入门到精通(合集)
  18. 一周内“克隆”了 Twitter,没用一行代码
  19. JavaScript replace()方法限制文本框输入文本类型(数字/字母等)的正则表达式
  20. 粗读SELF-SUPERVISED LEARNING IS MORE ROBUST TO DATASET IMBALANCE

热门文章

  1. 个人考研资料整理(更新一战后感想)
  2. 《Java程序设计》期末复习资料
  3. jsp linux 一键安装包,JspStudy免费版|JspStudy(jsp环境一键安装包) v2016.01.01免费版_星星软件园...
  4. arduino pro mini 迷你 ATmega328P 程序下载 usb-ttl reset
  5. heic图片格式转换jpg_如何在Mac上通过简单方法将HEIC图像转换为JPG
  6. STM32入门——什么是STM32
  7. 免费好用的英语词频统计软件(下载地址在文末)
  8. HCNA认证课程—VRP基础操作总结
  9. 视频教程-PHP开发进阶课程docker入门与进阶-PHP
  10. 解决 IDEA 导入项目 中文乱码