【音视频 | YUV格式】深入理解 YUV 数据格式,一文弄懂

2024-08-20 20:28

本文主要是介绍【音视频 | YUV格式】深入理解 YUV 数据格式,一文弄懂,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍YUV数据格式🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰: 2024-08-20 09:47:15

本文未经允许,不得转发!!!

目录

  • 🎄一、什么是 YUV 数据格式
  • 🎄二、YUV 采样格式分类
  • 🎄三、YUV 存储格式分类
    • ✨3.1 YUV444类型(`I444、YV24、NV24、NV42、YUV444 Packed`)
    • ✨3.2 YUV422类型(`I422、YV16、NV16、NV61、YUVY、VYUY、UYVY`)
    • ✨3.3 YUV420类型(`I420、YV12、NV12、NV21`)
  • 🎄四、YUV 格式的应用
  • 🎄五、总结


在这里插入图片描述

🎄一、什么是 YUV 数据格式

在图像和视频处理领域,YUV 格式是一种常见且重要的色彩编码方式,常用来做视频帧裸数据的表示。YUV主要应用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需要占用极少的频宽(RGB要求三个独立的视频信号同时传输)。

YUV 是一种将亮度(Luminance,用 Y 表示)和色度(Chrominance,用 U 和 V 表示)分开进行编码的方式。其中,Y分量代表了图像的亮度信息(明亮度,也称灰阶值),而 UV 分量则携带了颜色信息(色调和饱和度)。“亮度”是透过RGB输入信号来建立的,方法是将 RGB 信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面——色调与饱和度,分别用Cb和Cr来表示。Cb反映的则是RGB输入信号蓝色部分与RGB信号亮度值之间的差异;Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。所以,有时也会看到一些场景使用YCbCr来代替YUV

与常见的 RGB 格式(红、绿、蓝三原色)不同,YUV 格式在存储和传输图像数据时具有一些独特的优势。

本文将带您深入了解 YUV 格式的原理、特点以及其在各种应用中的优势。


在这里插入图片描述

🎄二、YUV 采样格式分类

由于人眼对 Y 的敏感度远超于对 U 和 V 的敏感,所以有时候可以多个 Y 分量共用一组 UV,这样既可以极大得节省空间,又可以不太损失质量。YUV 按照采样格式的不同,可以分成三类:

  • YUV4:4:4:在这种格式中,Y、U、V 三个分量的采样比例相同,每个像素都有独立的 Y、U、V 值,图像质量最高,但数据量也最大。图像中每个像素点都采集YUV分量,如下图
    在这里插入图片描述

  • YUV4:2:2:Y 分量的采样频率与像素相同,而 U 和 V 分量的采样频率是 Y 分量的一半。即在水平方向上,每两个像素共用一组 U、V 值。也就是说,图像的一行中,如果第一个像素点采集了 UV 分量,那第二个就不采集 UV 分量,依次类推,最终采集的每一行YUV的数量比值是4:2:2,如下图:
    在这里插入图片描述

  • YUV4:2:0:Y 分量的采样频率与像素相同,U 和 V 分量在水平和垂直方向上的采样频率均为 Y 分量的一半。也就是说,在图像的同一行中,如果采集了U分量,那就不会采集V分量,并且下一行只采集Y分量、V分量。采集U、V分量时是隔一个像素采集一次。如下图:
    第一行是采集U分量的,所以整行都不会采集V分量,且U分量是隔一个像素采集一次(第一个像素采,第二个就不采);
    因为上一行采集了U分量,所以第二行是采集V分量的,整行没采集U分量,且V分量是隔一个像素采集一次;
    最终采集下来,如果第一行YUV数量比值是4:2:0,那么第二行就是4:0:2,依次类推。
    在这里插入图片描述

在这三种格式中,YUV4:2:0是一种比较常见的压缩格式,在保证一定图像质量的前提下,大大减少了数据量。


在这里插入图片描述

🎄三、YUV 存储格式分类

采集到的yuv数据要怎么存储呢?是把Y、U、V分量都分开存储,还是交叉存储?

针对这个问题,如果没有一个标准的话,你存你的,我存我的,就可能造成你读取的YUV数据在其他人那里无法解析。YUV有三种存储格式:

  • Planar 格式(平面格式):Y、U、V 三个分量分别存储。
  • Semi-Planar 格式(半平面格式):Y 分量单独存放,UV 分量交错存储。
  • Packed 格式(打包格式):三个分量全部交错存储。

下面结合YUV的采样格式,以 6*4 的YUV图像为例,介绍常见的YUV类型。

✨3.1 YUV444类型(I444、YV24、NV24、NV42、YUV444 Packed)

  • I444(属于 YUV 444 Planar)
    I444格式是一种 Planar 格式(平面格式),将 YUV444 采样数据的YUV三个分量分别存储,如下图:先存储所有的Y分量,然后存储U分量,最后存储V分量。
    在这里插入图片描述
  • YV24(属于 YUV 444 Planar)
    YV24格式也是一种 Planar 格式(平面格式),将 YUV444 采样数据的YUV三个分量分别存储,与I444不同的是,YV24存完Y之后先存V分量再存U分量。如下图:先存储所有的Y分量,然后存储V分量,最后存储U分量。

在这里插入图片描述

  • NV24(属于 YUV 444 Semi-Planar)
    NV24格式是一种 Semi-Planar 格式(半平面格式),将 Y 分量单独存放,UV 分量交错存储。如下图:先存储所有的Y分量,然后UV 分量交错存储,UV排列时先存U分量。
    在这里插入图片描述

  • NV42(属于 YUV 444 Semi-Planar)
    NV42格式也是一种 Semi-Planar 格式(半平面格式),将 Y 分量单独存放,UV 分量交错存储。如下图:先存储所有的Y分量,然后UV 分量交错存储,UV排列时先存V分量。
    在这里插入图片描述

  • YUV444 Packed
    YUV444 Packed是一种Packed 格式(打包格式),三个分量全部交错存储。如下图,存储完第一个像素的YUV再存储第二个像素的,依此类推。
    在这里插入图片描述


✨3.2 YUV422类型(I422、YV16、NV16、NV61、YUVY、VYUY、UYVY)

  • I422(属于 YUV 422 Planar)
    I422格式是一种 Planar 格式(平面格式),将 YUV422 采样数据的YUV三个分量分别存储,如下图:
    先存储 w * h 长度的Y分量,然后存储 w * h * 0.5长度U分量,最后存储 w * h * 0.5 长度的V分量。
    在这里插入图片描述

  • YV16(属于 YUV 422 Planar)
    YV16格式也是一种 Planar 格式(平面格式),将 YUV422 采样数据的YUV三个分量分别存储,YV16存完Y之后先存V分量再存U分量。如下图:
    先存储 w * h 长度的Y分量,然后存储 w * h * 0.5长度V分量,最后存储 w * h * 0.5 长度的U分量。
    在这里插入图片描述

  • NV16(属于 YUV 422 Semi-Planar)
    NV16格式是一种 Semi-Planar 格式(半平面格式),将 Y 分量单独存放,UV 分量交错存储。如下图:先存储 w * h 长度的Y分量,然后将 w * h * 0.5长度U分量和 w * h * 0.5 长度的U分量交叉存储,UV排列时先存U分量。
    在这里插入图片描述

  • NV61(属于 YUV 422 Semi-Planar)
    NV61格式是一种 Semi-Planar 格式(半平面格式),将 Y 分量单独存放,UV 分量交错存储。如下图:先存储 w * h 长度的Y分量,然后将 w * h * 0.5长度U分量和 w * h * 0.5 长度的U分量交叉存储,UV排列时先存V分量。
    在这里插入图片描述

  • YUVY(属于 YUV 422 Packed)
    YUVY格式是一种Packed 格式(打包格式),将 YUV422 采样数据的YUV三个分量交叉存储,YUV 的排列顺序是 YUVY,两个 Y 共用一组 UV。如下图:
    在这里插入图片描述

  • VYUY(属于 YUV 422 Packed)
    VYUY格式是一种Packed 格式(打包格式),将 YUV422 采样数据的YUV三个分量交叉存储,YUV 的排列顺序是 VYUY,两个 Y 共用一组 UV。如下图:
    在这里插入图片描述

  • UYVY(属于 YUV 422 Packed)
    UYVY格式是一种Packed 格式(打包格式),将 YUV422 采样数据的YUV三个分量交叉存储,YUV 的排列顺序是 UYVY,两个 Y 共用一组 UV。如下图:
    在这里插入图片描述


✨3.3 YUV420类型(I420、YV12、NV12、NV21)

一般YUV420是没有Packet的存储方式的,常见的4种YUV420类型如下:

  • I420(属于 YUV 420 Planar)
    I422格式是一种 Planar 格式(平面格式),将 YUV420 采样数据的YUV三个分量分别存储,如下图:
    先存储 w * h 长度的Y分量,然后存储 w * h * 0.25长度U分量,最后存储 w * h * 0.25 长度的V分量。
    在这里插入图片描述

  • YV12(属于 YUV 420 Planar)
    YV12格式也是一种 Planar 格式(平面格式),将 YUV420 采样数据的YUV三个分量分别存储,YV12存完Y之后先存V分量再存U分量。如下图:
    先存储 w * h 长度的Y分量,然后存储 w * h * 0.25长度V分量,最后存储 w * h * 0.25 长度的U分量。
    在这里插入图片描述

  • NV12(属于 YUV 420 Semi-Planar)
    NV12格式是一种 Semi-Planar 格式(半平面格式),将 Y 分量单独存放,UV 分量交错存储。如下图:先存储 w * h 长度的Y分量,然后将 w * h * 0.25长度U分量和 w * h * 0.25 长度的U分量交叉存储,UV排列时先存U分量。
    在这里插入图片描述

  • NV12(属于 YUV 420 Semi-Planar)
    NV12格式是一种 Semi-Planar 格式(半平面格式),将 Y 分量单独存放,UV 分量交错存储。如下图:先存储 w * h 长度的Y分量,然后将 w * h * 0.25长度U分量和 w * h * 0.25 长度的U分量交叉存储,UV排列时先存V分量。
    在这里插入图片描述


在这里插入图片描述

🎄四、YUV 格式的应用

  1. 视频编码标准:如 H.264、H.265 等,广泛采用 YUV 格式作为输入和内部处理格式,以提高编码效率。
  2. 图像压缩:JPEG 图像压缩算法在处理彩色图像时,也会先将 RGB 转换为 YUV 格式。
  3. 数字电视和广播:YUV 格式在数字电视信号的传输和存储中得到了广泛应用。

在这里插入图片描述

🎄五、总结

👉本文介绍了YUV的采样格式、存储格式,以及十几种YUV格式:YUV444类型(I444、YV24、NV24、NV42、YUV444 Packed)、YUV422类型(I422、YV16、NV16、NV61、YUVY、VYUY、UYVY)、YUV420类型(I420、YV12、NV12、NV21)。

YUV 格式作为图像和视频处理中的重要色彩编码方式,凭借其在数据压缩、视觉特性适应等方面的优势,在众多领域发挥着关键作用。深入理解 YUV 格式对于从事相关领域的开发和研究人员具有重要意义。

希望通过本文的介绍,您对 YUV 格式有了更全面和深入的认识。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
YUV 格式详解,只看这一篇就够了
https://blog.csdn.net/mzpmzk/article/details/81239532

这篇关于【音视频 | YUV格式】深入理解 YUV 数据格式,一文弄懂的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091100

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal