关于YUV格式的一些总结

  • 一、YUV和YCbCr
    • 1、定义
    • 2、区别和联系
  • 二、不同的采样格式
    • 1、YUV444
    • 2、YUV440
    • 3、YUV422
    • 4、YUV420
    • 5、YUV411
    • 6、YUV410
  • 三、YUV数据排列格式
    • 1、四种数据排列方式
      • ①Planar Format
      • ②Semi-Planar Format
      • ③Tiled Semi-Planar Format
      • ④Interleaved Format
    • 2、常用YUV格式介绍
      • ①YV12、YU12格式(属于YUV420 Planar)
      • ②NV12、NV21格式(属于YUV420 Semi-Planar)
      • ③UYVY、VYUY、YUYV、YVYU(属于YUV422 Packed)
      • ④AYUV(属于YUV444 Packed)
      • ⑤P010、P016(属于YUV420 Semi-Planar)
      • ⑥P210、P216(属于YUV422 Semi-Planar)
      • ⑦Y210、Y216(属于YUV422 Packed)
      • ⑧Y410、Y416(属于YUV444 Packed)

一、YUV和YCbCr

1、定义

YUV,是一种颜色编码方法,常使用在各个视频处理组件中。Y表示明亮度(Luminance或Luma),也就是灰阶值,U和V表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

YCbCr,这里的Y和YUV的Y相同,而Cb和Cr则为蓝色和红色的浓度偏移量成份,也是用来表示色彩的。

2、区别和联系

本质上来说两者没有什么区别,YCbCr 是在世界数字组织视频标准研制过程中作为ITU - R BT.601 建议的一部分,其实是YUV经过缩放和偏移的翻版。

YUV 主要是用在彩色电视中,用于模拟信号表示。YCbCr 是用在数字视频、图像的压缩和传输,例如H264、HEVC、JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr。

二、不同的采样格式

写在前面:本部分参考如何理解 YUV ?、Chrominance Subsampling in Digital Images

一张图片是由一个个像素点组成,1920x1080即可理解为水平方向有1920个像素点,竖直方向有1080个像素点,每个像素都应当包含Y、U、V三个分量,但是在对色度二次采样的时候,会让Y分量共用UV分量,才出现了YUV422、YUV420等名称。

长图不好截图,裁成了很多段,下图说明了两种采样表示模式。
左边使用一个方框来表示一个像素点,每个小方块不管有没有涂黑都包含一个Y分量,被涂黑的方框内共用一组色度分量(即U+V分量),而那个小黑点就代表色度中心(没啥用,方便看而已)。

右边是二次采样模式标记法,即J:a:b表示法。图中的矩形框就是一个参考块,框里的圆点代表一个像素点,涂黑了就代表Y、U、V都有,没涂黑就只含有Y分量,至于左上角那个直角符号就是说明这个参考块取在最左上角。这个参考块的大小呢,一般取高度为2个像素点,宽度也就是J一般取4像素点,仔细看会发现参考块的左边有两个数字,这两个数字就代表每行黑点的个数。

其实,YUV420这些后面的数字就是通过4x2的参考块来确定的。可以观察一下下面参考块左边的小数字。

1、YUV444


上图是YUV444的采样模型,左图和右图都可以看出来每个像素点都有一对UV分量,这就相当于压根没有做色度二次采样。即每一个Y对应一组UV分量。

2、YUV440


上图是YUV440的采样模型,左图可以看出来在水平方向上每一个像素都有UV分量,而在竖直方向上每两个像素共用一对UV分量;在右图的表现就是第一行4个全黑,第二行四个全白。即每两个Y对应一组UV分量。

3、YUV422


上图是YUV422的采样模型,左图可以看出来在竖直方向上每一个像素都有UV分量,而在水平方向上每两个像素共用一对UV分量;在右图的表现就是每行两个黑两个白。即每两个Y对应一组UV分量。

4、YUV420


上图是YUV420的采样模型,左图可以看出来四个像素点共用一对UV分量,在水平方向上每两个像素共用一对UV分量,在竖直方向上也是每两个像素包含一对UV分量;在右图的表现就是第一行两个黑两个白,第二行全白。即每四个Y对应一组UV分量。

5、YUV411


上图是YUV411的采样模型,左图可以看出来在水平方向上每四个像素点共用一对UV分量,而在竖直方向上每个像素都包含一对UV分量;在右图的表现就是两行都是一个黑三个白。即每四个Y对应一组UV分量。

6、YUV410


上图是YUV410的采样模型,左图可以看出来8个像素点共用一对UV分量,在水平方向上每四个像素点共用一对UV分量,在竖直方向上每两个像素点共用一对UV分量;在右图的表现就是只有第一行有一个黑其他全白。即每八个Y对应一组UV分量。

三、YUV数据排列格式

1、四种数据排列方式

①Planar Format

Planar的YUV格式,即平面存储格式先连续存储所有像素点的Y,紧接着存储所有像素点的U或V,最后存储剩下的U或者V。例如YU12(也叫I420),属于YUV420p,四个像素共用一组UV分量;它的数据排列方式为:
Y1Y2Y3Y4Y5Y6Y7Y8 U1U2 V1V2(如下图)

②Semi-Planar Format

Semi-Planar的YUV格式,顾名思义,半平面存储格式,也就是先连续存储所有的Y分量,再交错存储U和V分量。例如NV12,属于YUV420sp,四个像素共用一组UV分量;它的数据排列方式为:
Y1Y2Y3Y4Y5Y6Y7Y8 U1V1 U2V2(如下图)
他还有个兄弟NV21,它的数据排列方式为:
Y1Y2Y3Y4Y5Y6Y7Y8 V1U1 V2U2

③Tiled Semi-Planar Format

Tiled Semi-Planar的YUV格式,Tiled SP格式不再以光栅扫描的顺序来排列数据,而是将图像以宏块划分(例如16x16像素为一个宏块),宏块划分是以从左到右、从上到下的顺序,如下图。宏块是一个正方形的像素区域,如果采样格式为YUV420sp,那么就会把这块像素区域以NV12/NV21的格式存储(这一点存疑,暂时没看到有文章具体说明),每一个宏块皆是如此,并且宏块之间的内存是连续的。

④Interleaved Format

Interleaved的YUV格式,又叫Packed Format,这种格式下YUV数据是交错存储的。举个栗子,UYVY,属于YUV422采样,水平方向每两个像素共用一组UV分量;它的数据排列方式为:
U1Y1V1Y2 U2Y3V2Y4

2、常用YUV格式介绍

本文都是小端模式下的,左端为低字节。

①YV12、YU12格式(属于YUV420 Planar)

YU12数据排列格式:Y1Y2Y3Y4Y5Y6Y7Y8 U1U2 V1V2
YV12数据排列格式:Y1Y2Y3Y4Y5Y6Y7Y8 V1V2 U1U2

②NV12、NV21格式(属于YUV420 Semi-Planar)

上面3.1.2讲过。

③UYVY、VYUY、YUYV、YVYU(属于YUV422 Packed)

UYVY数据排列格式:U1Y1V1Y2 U2Y3V2Y4
其他三种把顺序换换就行了。

④AYUV(属于YUV444 Packed)

A为透明度分量,数据排列格式为A、Y、U、V顺序存储,每个分量8bit。

⑤P010、P016(属于YUV420 Semi-Planar)

以上所介绍的四种YUV格式,均是每个分量占8bit,而P010格式每个分量占10bit,P016每个分量占16bit,仅此而已。它们的数据存储格式与NV12一致,只是Y、U、V所占bit数不同。

⑥P210、P216(属于YUV422 Semi-Planar)

同⑤,P210是10bit的,P216是16bit的,这两种也是Semi-Planar的,数据存储格式与NV12一致。

⑦Y210、Y216(属于YUV422 Packed)

Y210是10bit的,Y216是16bit的,这两种是Packed的。它们的数据存储格式为:
Y1U1Y2V1 Y3U2Y4V2

⑧Y410、Y416(属于YUV444 Packed)

同理,Y410是10bit的,Y416是16bit的。它们的数据排列如下图。上面的图为10bit的存储格式,下面的图为16bit的存储格式,A代表透明度(Alpha)。


最后,关于10bit YUV有一点需要注意一下,如下图,这其实是10bit数据存储时的真实面貌,用16bit来代替10bit,所以要把低六位bit全部置为0,高10bit为有效位。

关于YUV格式的一些总结相关推荐

  1. 使用 8 位 YUV 格式的视频呈现

    发布日期 : 12/9/2004 | 更新日期 : 12/9/2004 Gary Sullivan 和 Stephen Estrop Microsoft Digital Media Division ...

  2. 视频与图像RGB/YUV格式详解

    计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red).G(Green).B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红.绿.蓝磷光材料发光而产生色彩. ...

  3. vs2010MFC D3D播放YUV格式视频详细制作全过程

    1.环境配置 1.1 Microsoft Visual Studio 2010安装 先下载Visual Studio 2010,然后双击setup.exe安装,安装时有一步选择vc++安装就可以了,其 ...

  4. yuv420p 详解_Android中的YUV格式解析

    一.YUV格式 YUV 表示三个分量, Y 表示 亮度(Luminance),即灰度值,UV表示色度(Chrominance),描述图像色彩和饱和度,指定颜色.YUV格式有YUV444. YUV422 ...

  5. 使用C++实现YUV格式图像与RGB格式图像之间相互转换

    使用C++实现YUV格式图像与RGB格式图像之间相互转换 一.RGB与YUV转换公式 1.RGB转YUV 1)RGB转换亮度与色差信号公试: 2)归一化为YUV的转化公试为: 2.YUV转RGB 二. ...

  6. RGB与YUV格式简介

    (1) RGB格式简介 RGB色彩模式是一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的.图像中每一个像素的RGB分量都分配一个0~25 ...

  7. YUV格式学习:Y转换成RGB24

    除了各种YUV格式转换成RGB外,还有一种是只转Y到RGB,如果YUV只有Y分量,也就就是YUV400这个格式了.如果成RGB后,显示出来的图像就是灰度图(因为Y是亮度),也可以理解为黑白图吧.下面给 ...

  8. YUV格式学习:YUV444转换RGB24

    YUV格式有很多种,按其采样方式,有444.422.420,还有411(但不常见).针对数据的排序,又有平面格式和打包格式,还有"踢啊"特有的半平面格式--这些排列组合,就显得YU ...

  9. yuv格式转换是那个组织定义的_YUV格式

    在前几篇介绍了OpenGL几种2D效果(旋转.平移.缩放.滤镜)后可以看到,GL图像颜色空间是用R.G.B.A,也就是红.绿.蓝 加一个透明度通道来表示的.比如,gl_FragColor 通常在取值的 ...

  10. 读取4:2:0格式YUV序列的Y分量、U分量以及V分量,并分别保存为.yuv格式(matlab实现)

    读取4:2:0格式YUV序列的Y分量.U分量以及V分量,并分别保存为.yuv格式,不多说,具体程序如下: read_Y_U_V.m %% 读取4:2:0格式YUV的Y.U和V分量,然后将三个分量分别保 ...

最新文章

  1. Vivado不同版本打开IP核锁定的解决办法
  2. JAVA之JVM垃圾回收(GC)机制详解
  3. mySQL:两表更新(用一个表更新另一个表)的SQL语句
  4. 如何发布Android Library到maven私有仓库
  5. lepus mysql 复制监控_MySQL数据库之CentOS搭建lepus3.8监控MySQL
  6. HTTP之长连接与短连接(C++ Qt框架实现)
  7. TwentyTwelve透明主题二次美化版
  8. Mysql-锁/隔离级别
  9. java单例模式_Java 实现单例模式的 9 种方法
  10. java httpserver stop_java web tomcat服务停止Stopping Coyote HTTP/1.1 on http-8089
  11. 几何校正(坐标变换+灰度重采样)
  12. 干货满满!龙蜥社区Meetup走进龙芯圆满结束,5大技术分享精彩回顾
  13. macOS Big Sur 11.7.1 (20G918) 正式版 ISO、PKG、DMG、IPSW 下载
  14. 苹果手机上的计算机恢复出厂设置在哪里,苹果手机怎么还原出厂设置【详解】...
  15. C 程序设计语言——第七章练习题
  16. 产品销售份额数据统计流程图模板分享
  17. JavaScript中查找关键词
  18. 一个简单的BitTorrent客户端实现(五):tracker manager和tracker实现
  19. 数据挖掘::实验一 WEKA分类
  20. linux局域网下远程启动机器

热门文章

  1. [转]老生常谈session,cookie的区别,安全性
  2. 在C#中判断某个类是否实现了某个接口
  3. 自己动手,在macOS High Sierra中编译一个可debug的JDK
  4. ·通过wifi_scan学习esp32wifi程序编写
  5. Spring之JDBC模板jdbcTemplate
  6. 词形变换和词干提取工具(英文)
  7. matlab两个数据放在一起,问个小问题,怎么把两个图像放在一起?
  8. Linux学习笔记 -- rpm 与 shell 编程
  9. 【联合仿真】Adams六关节机械臂与Matlab/Simulink的联合仿真(下)
  10. python怎么使用base64_python常用库之base64