YUV (Y'CbCr)是一种像素格式,常见于视频编码与静态图像。与 RGB 格式(红-绿-蓝)相反,YUV 分别由一个称为 Y(相当于灰度)的“亮度”分量(Luminance or Luma)和两个称为 U(蓝色投影 Cb)和 V(红色投影 Cr)的“色度”分量(Chrominance or Chroma)表示,由此得名。

仅有 Y 分量而没有 UV 分量信息,一样可以显示完整的黑白(灰度)图像,解决了模拟信号电视黑白与彩色的兼容问题。

采样

色度通道(UV)的采样率可以低于亮度通道(Y),而不会显着降低感知质量。一种称为 “A:B:C” 的表示法用于描述相对于 Y 采样, U 和 V 的频率:

4:4:4 表示不降低色度(UV)通道的采样率。每个 Y 分量对应一组 UV 分量。

4:2:2 表示 2:1 水平下采样,没有垂直下采样。每两个 Y 分量共享一组 UV 分量。

4:2:0 表示 2:1 水平下采样,同时 2:1 垂直下采样。每四个 Y 分量共享一组 UV 分量。

4:1:1 表示 4:1 水平下采样,没有垂直下采样。每四个 Y 分量共享一组 UV 分量。4:1:1 采样比其他格式少见,本文不再详细讨论。

下图显示了如何针对每个下采样率采样色度。亮度样本用十字表示,色度样本用圆圈表示。

存储格式

YUV 在存储上通常分为平面格式(Planar),半平面格式(Semi-Planar)以及打包格式(Packed)。

Planar 平面格式

平面格式有时也称为三面格式(Triplanar),即 Y, U, V 三个分量各自使用单独的数组保存,这种三平面分离的格式比较方便视频编码。

YU12 (I420)4:2:0 Formats, 12 Bits per Pixel, 3 Planars

YU12 即 I420,也叫 IYUV,属于 YUV420P 格式。三个平面,分别存储 Y U V 分量。每四个 Y 分量共享一组 UV 分量。U、V 平面的 strides, width 和 height 都是 Y 平面的一半,因此一个像素 12 bits,内存排列如下图所示:

从图中可看出,U、V 平面的每行字节数(strides)、高(height)都是 Y 平面的一半。

I420 是音视频开发中常用的一种格式。

YV124:2:0 Formats, 12 Bits per Pixel, 3 Planars

YV12 与 I420 几乎一样,仅改变了 U, V 平面的顺序。内存排列如下图所示:

J4204:2:0 Formats, 12 Bits per Pixel, 3 Planars

J420 与 I420 完全相同,但具有完整范围(0-255,full range)的亮度(Y)分量,而不是有限范围(16-240,limited range,在 iOS 上也叫做 video range)。色度(UV)分量与 I420 中的完全相同。

IMC14:2:0 Formats, 16 Bits per Pixel, 3 Planars

IMC1 与 I420 类似,U, V 平面的宽(width)、高(height)是 Y 平面的一半,但是每行字节数(strides)与 Y 平面一致,因此 U, V 平面在内存上会有留空(padding),因此一个像素 16 bits,如图所示:

IMC34:2:0 Formats, 16 Bits per Pixel, 3 Planars

IMC3 与 IMC1 几乎一样,仅改变了 U, V 平面的顺序。内存排列如下图所示:

I4224:2:2 Formats, 16 Bits per Pixel, 3 Planars

I422 属于 YUV422P 格式。三个平面,分别存储 Y U V 分量。每两个 Y 分量共享一组 UV 分量。U、V 平面的 strides, width 是 Y 平面的一半,但 height 与 Y 平面一致,因此一个像素 16 bits,内存排列如下图所示:

从图中可看出,U、V 平面的每行字节数(strides)是 Y 平面的一半,高(height)与 Y 平面一致。

J4224:2:2 Formats, 16 Bits per Pixel, 3 Planars

J422 与 I422 完全相同,但具有完整范围(0-255,full range)的亮度(Y)分量,而不是有限范围(16-240,limited range,在 iOS 上也叫做 video range)。色度(UV)分量与 I420 中的完全相同。

Semi-Planar 半平面格式

半平面格式具有两个平面而不是三个平面,一个平面存储亮度(Y)分量,另一个平面存储两个色度(UV)分量。有时也将它们称为双平面格式(BiPlanar)。

NV124:2:0 Formats, 12 Bits per Pixel, 2 Planars

NV12 属于 YUV420SP 格式。两个平面,分别存储 Y 分量 和 UV 分量。其中 UV 分量共用一个平面并且以 U, V, U, V 的顺序交错排列。每四个 Y 分量共享一组 UV 分量。

UV 平面的 strides, width 与 Y 平面一样长,但 height 仅为 Y 平面的一半。因此一个像素 12 bits,内存排列如下图所示:

从图中可看出,UV 平面的每行字节数(strides)与 Y 平面一致,高(height)是 Y 平面的一半。

NV12 是 iOS 相机(AVCaptureOutput)可直接输出的两种视频帧格式之一,另外一种是 BGRA32(kCVPixelFormatType_32BGRA)。

在 iOS 上,NV12 还分为 Full Range (0-255, kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) 和 Video Range (16-240, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange),区别仅为亮度(Y)分量的取值范围,一般而言,Full Range 适用于静态图像(拍照),Video Range 适用于视频采集(摄像)。

NV214:2:0 Formats, 12 Bits per Pixel, 2 Planars

NV21 属于 YUV420SP,与 NV12 几乎一致,区别是 UV 平面中 U 与 V 的排列顺序颠倒,以 V, U, V, U 的顺序交错排列,内存排列如图所示:

NV21 是 Android 相机(Camera)默认的输出格式。

Packed 打包格式

打包格式通常只有一个平面,所有亮度(Y)和色度(UV)数据都交织在一起。有点类似于 RGB 格式,只是使用了不同的色彩空间。

打包格式在网络摄像头中较为常见。硬件设备使用多平面格式效率较低,因为每个像素需要多次内存访问。而打包格式由于仅一个平面,访问内存的开销较小。

AYUV4:4:4 Formats, 32 Bits per Pixel

AYUV 是 Packed 打包格式,其中每个像素编码为四个连续字节,每个像素在内存中按照 V, U, Y, A 的顺序排列(A 指 alpha 通道),如下图所示:

YUYV (V422 / YUY2 / YUNV)4:2:2 Formats, 16 Bits per Pixel

YUYV 通常也称作 V422、YUY2、YUNV

YUY2 是 Packed 打包格式,其中两个像素共用一组 UV 分量,内存中按照 Y U Y V 的顺序排列,如下图所示:

UYVY (Y422 / UYNV)4:2:2 Formats, 16 Bits per Pixel

UYVY 通常也称作 Y422、UYNV

UYVY 与 YUYV 类似,只是亮度(Y)分量与色度(UV)分量排列顺序颠倒,如下图所示:

参考资料

uv422转换为yuv420_详解 YUV 格式(I420/YUV420/NV12/NV12/YUV422)相关推荐

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

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

  2. 图像和流媒体 -- 详解YUV数据格式

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78283369 我们在讲 FFmpeg 系列的时候,有提到 YUV 的.其中包 ...

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

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

  4. 详解 YUV,一文搞定 YUV 是什么!

    YUV 是一个颜色模型,通常用作彩色图像管道的一部分.它对彩色图像或视频进行编码时考虑到了人类的感知,与"直接"的 RGB 表示相比,允许减少色度分量的带宽.历史上,术语 YUV ...

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

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

  6. Python 将.py转换为.exe详解

    本文是由@熊猫大哥大的博客修改而来(所以就不能说是"原创"了) 原博客链接:Python学习笔记(15)-Python代码转换为exe可执行程序详解(下面会提到本文与其的一点不同) ...

  7. urlencoded格式详解 JSON格式详解

    一.表单格式详解 [urlencoded格式]:又叫form格式,或者是x-www-form-urlencoded格式. 口诀:表单格式是由键值对组成.键和值之间用=.多个键值对之间用&.例如 ...

  8. HTML标签详解之格式标签

    本次的HTML教程是学习HTML格式标签,其中包括段落.区块和列表的HTML标签. 1.段落标签:<p>,用来定义文章中的段落,HTML会自动为段落前后添加一个额外空行,做为段落间距. 折 ...

  9. linux ls使用方法,Linux/Ubuntu ls命令详解使用格式和方法

    烈火建站学院文档 ls命令是Linux/Ubuntu中用来查看所选目录下有哪些文件以及列出当前目录中子目录的清单的命令,是Linux/Ubuntu中经常用到的一个命令,也是一个非常基本的命令.在很多操 ...

  10. python的浮点数占字节_Python二进制文件读取并转换为浮点数详解

    本文所用环境: Python 3.6.5 |Anaconda custom (64-bit)| 引言 由于某些原因,需要用python读取二进制文件,这里主要用到struct包,而这个包里面的方法主要 ...

最新文章

  1. Linux makefile 教程
  2. Mysql-4-数据库的基本操作
  3. 085_html5服务器发送事件
  4. LeetCode动态规划 分割等和子集
  5. SSH(Secure Shell) 介绍一
  6. 使用 IntraWeb (12) - 基本控件之 TIWGradButton、TIWImageButton
  7. [Java] 蓝桥杯ALGO-103 算法训练 完数
  8. 不确定性原理的前世今生 · 数学篇(一)
  9. 大数据行业人士必知10大数据思维原理
  10. 概率图模型(快速入门必备)
  11. 市面所有机器人框架开源啦(含VX框架源码)
  12. 【软件测试手册2021版】测试题总结
  13. hdu6438(优先队列)
  14. 电子琴节奏包制作_MIDI音乐制作基础必备
  15. Scrum敏捷开发之我的总结
  16. win10同步服务器文件夹在哪,win10系统一键同步win 10文件夹视图的操作方法
  17. idea热部署插件JRebel激活(强烈推荐,试试就离不开了)
  18. 纯干货分享,新手小白如何精细化运营,玩转抖音小店无货源店群?
  19. RTC实时时钟(STM32)
  20. python中fig_Matplotlib画图中fig,ax,plt的区别和联系

热门文章

  1. word目录及图表目录的自动生成
  2. JS实现图片的懒加载
  3. 介绍下JS里4种实现页面跳转的方法
  4. 2020-12-23 PMP 群内练习题 - 光环
  5. linux如何安装usb转串口驱动,虚拟机下Ubuntu安装usb转串口驱动
  6. 本文来自合作伙伴“阿里聚安全”.
  7. 多套 企业/工厂/超市/仓库库存管理系统源码 工具软件程序源代码
  8. HART协议详解:HART与MCU通信代码解析举例
  9. 网线的分类及速率,您知道吗?
  10. ios 视频播放器:AVPlayer(附:seektotime精准定位)