YUV420数据格式详解

YUV420数据格式详解YUV 简介 YUV 格式有两大类 planar 和 packed 对于 planar 的 YUV 格式 先连续存储所有像素点的 Y 紧接着存储所有像素点的 U 随后是所有像素点的 V 对于 packed 的 YUV 格式 每个像素点的 Y U V 是连续交叉存储的 YUV 分为三个分量 Y 表示明亮度 Luminance 或 Luma 也就是灰度值 而 U 和 V 表示的则是色度 Chrominance 或 Chroma 作用是描述影像色彩及饱和度 用于指定像素的颜色 与我们熟知的 RGB 类似 YUV 也是一种颜色编码方法 主要用于电视系统以及模

YUV简介

YUV格式有两大类:planarpacked
对于planarYUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V
对于packedYUV格式,每个像素点的Y,U,V是连续交叉存储的。

YUV分为三个分量,Y表示明亮度(Luminance或Luma),也就是灰度值;而UV表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。

采样方式

YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4YUV4:2:2YUV4:2:0,关于其详细原理,可以通过网上其它文章了解,这里我想强调的是如何根据其采样方式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。
用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采样该像素点的UV分量。

YUV420数据格式详解

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

  • YUV 4:4:4采样,每一个Y对应一组UV分量。
  • YUV 4:2:2采样,每两个Y共用一组UV分量。
  • YUV 4:2:0采样,每四个Y共用一组UV分量。

存储方式

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

YUYV 格式 (属于YUV422)

yuyv.png

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

UYVY 格式 (属于YUV422)

uyuv.png

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

YUV422P(属于YUV422)

yuv422p.png

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

YV12,YU12格式(属于YUV420)

yv12.png

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

NV12、NV21(属于YUV420)

nv12.png

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

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

yuv420sp.png

YUV420p数据格式如下图

yuv420p.png

YV12和I420的区别

一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,如果是I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Bit。在采集到RGB24数据后,需要对这个格式的数据进行第一次压缩即RGB2YUV。X264在进行编码的时候需要标准的YUV(4:2:0)。
总结:

  • YUY2 是 4:2:2 [Y0 U0 Y1 V0]
  • yuv420: yuv yuv yuv
  • YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。
    • I420: YYYYYYYY UU VV =>YUV420P
    • YV12: YYYYYYYY VV UU =>YUV420P
  • YUV420SP, Y分量平面格式,UV打包格式, 分为NV12和NV21。
    • NV12: YYYYYYYY UVUV =>YUV420SP
    • NV21: YYYYYYYY VUVU =>YUV420SP
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203429.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午9:49
下一篇 2026年3月19日 下午9:49


相关推荐

  • centos nmtui(centos7 nmtui配置)

    一般步骤:先编辑后激活,一步都不能少使用nmtui可以为新网卡添加连接,然后进行ip配置,也可以对已经存在且使用的网卡进行ip的直接设置…

    2022年4月16日
    46
  • Linux 硬盘分区生效命令partprobe[通俗易懂]

    Linux 硬盘分区生效命令partprobe[通俗易懂]在Linux中使用fdisk命令进行分区时,有时会遇到“WARNING:Re-readingthepartitiontablefailedwitherror16:Deviceorresourcebusy.Thekernelstillusestheoldtable.Thenewtablewillbeusedatthenextreboot.”这种告…

    2022年10月21日
    4
  • JS获取除法取整[通俗易懂]

    JS获取除法取整[通俗易懂]保留整数部分:parseInt(17/2)向上取整:Math.ceil(17/2)向下取整:Math.floor(17/2)四舍五入:Math.round(17/2)取余数:17%2

    2022年6月21日
    44
  • java之二维数组的初始化

    java之二维数组的初始化二维数组的格式:二维数组的内存图:二维数组的例子:

    2022年5月16日
    49
  • 最新版本git下载安装&配置教程「建议收藏」

    最新版本git下载安装&配置教程「建议收藏」原文地址https://blog.csdn.net/zx1996119/article/details/80814752下载地址:https://git-scm.com/downloads如图:这里下载完成后是酱子的如图(windows64位的)1.双击打开后,点击Next2.再次点击Next(这里我改了安装的路径)3.下图方框…

    2022年5月1日
    61
  • NLTK 基础知识总结

    NLTK 基础知识总结什么事实 NLTKNLTK 全称 NaturalLangu 自然语言处理工具包 是 NLP 研究领域常用的一个 Python 库 由宾夕法尼亚大学的 StevenBird 和 EdwardLoper 在 Python 的基础上开发的一个模块 至今已有超过十万行的代码 这是一个开源项目 包含数据集 Python 模块 教程等 怎样安装详情可以参见我的另一篇博客 NLP 的开发环境搭建 通

    2025年11月29日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号