YUV存储格式

article/2025/9/23 4:28:34

YUV存储格式

  • YUV的存储格式
    • planar(中文翻译:平面的;二维的;平坦的)
    • packed (中文翻译:挤满塞满)
  • YUV的采样方式
  • 存储方式
    • YV12在内存中存储
    • NV12在内存中存储
    • YUYV
    • UYVY
    • YU422P
    • YUV420P YUV420SP
    • YUV420SP
    • YUV420P
    • YU12
    • YV12
    • NV21
    • NV12
  • reference

YUV的存储格式

YUV的格式有两大类:planar和packed。

planar(中文翻译:平面的;二维的;平坦的)

对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

packed (中文翻译:挤满塞满)

对于packed的YUV格式,每个像素点的Y、U、V都是连续交叉存储的。

YUV的采样方式

YUV 4:4:4采样,每一个Y对应一组UV分量,一个YUV占8+8+8 = 24bits 3个字节。
YUV 4:2:2采样,每两个Y共用一组UV分量,一个YUV占8+4+4 = 16bits 2个字节。
YUV 4:2:0采样,每四个Y共用一组UV分量,一个YUV占8+2+2 = 12bits 1.5个字节。

我们最常见的YUV420P和YUV420SP都是基于4:2:0采样的

YUV码流的存储格式与其采样方式有密切的关系,主流的采样方式有三种:YUV4:4:4、YUV4:2:2、YUV4:2:0。
下面三个图比较直观的显示了三种采样方式。其中黑点表示采样像素点的Y分量,空心圆表示采样像素点的UV分量。
在这里插入图片描述
YUV上图来源
在这里插入图片描述

存储方式

YV12在内存中存储

在这里插入图片描述
在这里插入图片描述

NV12在内存中存储

在这里插入图片描述
在这里插入图片描述
YV12和NV12原图来源

W即图像的宽度,H即图像的高度,Stride表示图像行的跨度,超出W部分为填充数据,主要目的是为了字节对齐,一般以16字节或者或者32字节对齐居多
从左侧数据存储结构图看出高度(H)是分层次的,YV12三层和NV12两层,这个层次结构称为 Plane,即YV12在代码中用
Plane[0]表示Y数据的起始地址,Plane[1]表示V数据的起始地址,Plane[1]表示U数据的起始地址。而NV12的UV是在一个Plane中交错存放,因此用两个Plane表示即可。

从右侧的数据排布图可见YV12和NV12都是YUV
4:2:0采样,每四个Y共用一组UV分量,已用颜色标明Y1、Y2、Y7、Y8共用U1、V1,并且在内存中连续排布。

YUYV

<1>YUYV格式(属于YUV422)请注意没有带P的,都是Y、U、V都是连续交叉存储
在这里插入图片描述
YUYV是YUV422采样的存储格式的一种,相邻的两个Y公用其相邻的两个Cb(U)、Cr(V)。对于像素点Y’00、Y’01而言,其Cb、Cr的值均为Cb00、Cr00,其他的像素点的YUV取值依次类推。

UYVY

<2>UYVY格式(属于YUV422)
在这里插入图片描述

YU422P

<3>YUV422P(属于YUV422)带P的先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V
在这里插入图片描述
YUV422P是一种Plane模式,即planar模式,并不是像上面YUV数据交错存储,而是先存储所有的Y分量,然后存储所有的U(Cb)分量,最后存储所有的V(Cr)分量。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y’00、Y’01而言,其Cb、Cr的值均为Cb00、Cr00。

YUV420P YUV420SP

在这里插入图片描述
上图来源

YUV420P(YU12和YV12)格式.
YUV420P又叫plane平面模式,Y , U , V分别在不同平面,也就是有三个平面,它是YUV标准格式4:2:0,主要分为:YU12和YV12

YUV模型是根据一个亮度(Y分量)和两个色度(UV分量)来定义颜色空间,常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等,其中比较常见的YUV420分为两种:YUV420P和YUV420SP。

YUV420SP

<4>YUV420sp
YUV420SP格式的图像阵列,首先是所有Y值,然后是UV或者VU交替存储,NV12和NV21属于YUV420SP格式,是一种two-plane模式,即Y和UV分为两个plane,但是UV(CbCr)为交错存储,而不是分为三个平面。
在这里插入图片描述

YUV420P

<5>YUV420p
在这里插入图片描述
在这里插入图片描述

YU12

<6>YV12、YU12格式(属于YUV420)
在这里插入图片描述
YU12(又称I420)和YV12属于YUV420格式,也是一种Plane模式,将Y、U、V分量分别打包,依次存储。其没一个像素点的YUV数据提取都遵循YUV420格式的提取方式,即4个Y分量共用一组UV。如上图中,Y’00、Y’01、Y’10、Y’11共用Cr00、Cb00,其他以此类推。

注意,YU12与YV12的区别在于是先存U还是先存V。对于YU12来说,存储顺序是YUV,即YCbCr;对于YV12来说,存储顺序是YVU,即YCrCb。所以上图就是YV12了。

YU12格式
在android平台下也叫作I420格式,首先是所有Y值,然后是所有U值,最后是所有V值。
在这里插入图片描述
YU12:亮度(行×列) + U(行×列/4) + V(行×列/4)

YV12

YV12格式与YU12基本相同,首先是所有Y值,然后是所有V值,最后是所有U值。只要注意从适当的位置提取U和V值,YU12和YV12都可以使用相同的算法进行处理。
在这里插入图片描述
YV12:亮度Y(行×列) + V(行×列/4) + U(行×列/4)

YU12: YYYYYYYY UUVV    =>    YUV420P
YV12: YYYYYYYY VVUU    =>    YUV420P

<7>NV12、NV21(属于YUV420)

NV21

NV21格式

android手机从摄像头采集的预览数据一般都是NV21,存储顺序是先存Y,再VU交替存储,NV21存储顺序是先存Y值,再VU交替存储:YYYYVUVUVU,以 4 X 4 图片为例子,占用内存为 4 X 4 X 3 / 2 = 24 个字节

在这里插入图片描述

NV12

NV12格式

NV12与NV21类似,也属于YUV420SP格式,NV12存储顺序是先存Y值,再UV交替存储:YYYYUVUVUV,以 4 X 4 图片为例子,占用内存为 4 X 4 X 3 / 2 = 24 个字节

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

注意,NV21与NV12的区别在于,在UV交替的存储中,NV12是UV(CbCr)交替存储,NV21是VU(CrCb)交替存储,所以上图显示的是NV21。而且NV12是IOS的模式,NV21是Android的模式。

reference

1.YUV格式详解
2.图解YU12、I420、YV12、NV12、NV21、YUV420P、YUV420SP、YUV422P、YUV444P的区别
3.sheldon_blogs 图像基础知识之YUV
第3位对图像在内存中存储研究的比较好
4.YUV420数据格式详解


http://chatgpt.dhexx.cn/article/70dRalHW.shtml

相关文章

YUV格式到底是什么?

简介 YUV是视频、图片、相机等应用中使用的一类图像格式&#xff0c;实际上是所有“YUV”像素格式共有的颜色空间的名称。 与RGB格式&#xff08;红 - 绿 - 蓝&#xff09;不同&#xff0c;YUV是用一个称为Y&#xff08;相当于灰度&#xff09;的“亮度”分量和两个“色度”分…

YUV格式详解

介绍 我们都知道&#xff0c;YUV是一种表示颜色的模型&#xff0c;另外在大多数情况下&#xff0c;我们所说的YUV与YCbCr是一样的&#xff0c;其中Y指亮度分量&#xff0c;UV和CbCr都是色彩分量。 有一款YUV图像查看工具 YUV Eye &#xff0c;可以使用这个工具查看YUV图像&am…

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

如需转载请注明出处&#xff1a;https://blog.csdn.net/qq_29350001/article/details/78283369 我们在讲 FFmpeg 系列的时候&#xff0c;有提到 YUV 的。其中包括YUV播放器、简单的YUV格式介绍。 参看&#xff1a;FFmpeg再学习 -- 视音频基础知识 接下来详细研究一下&#x…

YUV格式详解【全】

YUV格式详解 YUVYUV 采样YUV 4:4:4YUV 4:2:2YUV 4:2:0YUV 4:1:1 planar formatPacked (or Interleaved)PlanarSemi-Planar 关系图 YUV 与 RGB 相互转换计算公式推导1. 模拟 RGB转YUV的推导公式2. 数字 RGB to YUV 1. 模拟YUV→模拟RGB2. 数字YUV→数字RGBYUV与RGB的相互转换会损…

LaTeX Error: Unknown option quiet for package fontspec

编译方式错误&#xff0c;fontspec是基于Xe和Le开发的&#xff0c;所以不能使用pdf**进行编译

Latex Error:Two \documentclass or \documentstyle commands. \documentclass{

今天尝试在latex中使用markdown语法时出现了如下错误: Two \documentclass or \documentstyle commands. \documentclass{ 在网上查找了好多地方,都说是因为用了两次\documentclass命令导致的,可是我能确定我只用了一次\documentclass命令,最后我终于找到了问题所在。因为我的…

介绍Latex神器——Overleaf的方法

向大家介绍2个神网站&#xff0c;一个是腾讯在线文档&#xff0c;一个是overleaf 腾讯在线文档就不多介绍了&#xff0c;可以直接百度网址并使用&#xff0c;它有2个亮点&#xff0c;1.特别简洁&#xff0c;高效。2.可以多人在线&#xff0c;共同编辑同一个文档。&#xff08;在…

LaTeX:斜线表头的表格制作

参考 LaTeX&#xff1a;斜线表头的表格制作 - 云社区 - 腾讯云 需求&#xff1a;正规表格的左上角"第一个单元是表头"&#xff0c;一般都是用"斜线分区"的&#xff01;本文介绍其实现方法&#xff1a;不仅适用在表头&#xff0c;表中任何一个单元位置都适…

latex报错 Misplaced \noalign.

表格最后一行少了双斜杠\\

3、显示锁和AQS

3、显示锁和AQS 原子操作CAS atom&#xff08;不可分割&#xff09; 什么是原子操作&#xff1f;如何实现原子操作&#xff1f; synchronized 基于阻塞的锁机制 可以实现&#xff0c;但会引发以下问题 1、被阻塞的线程优先级很高 2、拿到锁的线程一直不释放锁怎么办&#x…

LaTex绘制跨行跨列的三线表

有时表格某单元格需要横跨几列&#xff0c;我们可以使用 \multicolumn 命令&#xff0c; 同时使用 booktabs 宏包的 \cmidrule 命令来画横跨几列的横线。它们的语 法如下&#xff1a; \begin{table }[ htbp]\centering \begin{tabular }{ lll}\toprule & \multicolumn{2}{…

Springer latex期刊模板使用的坑

1.之前都是用这个编译&#xff0c;Springer 期刊不是这个&#xff0c;是pdflatex 解决方案&#xff1a;可以上面选项换成pdflatex也可以加这命令\documentclass[pdflatex,sn-basic]{sn-jnl}&#xff08;注意documentclass只能出现一次&#xff0c;所以pdflatex可以加在原有的d…

LaTeX--5--一个文档的基本结构/导言区/标题_作者_日期

本期的主要内容有&#xff1a; 一个 LaTeX 文档的基本结构导言区常用排版命令标题、作者与日期字体与字号特殊字符的输入一些常用排版效果 另外我们还会穿插介绍一些 LaTeX 的基本概念&#xff0c;在文中加粗表示并附上英文。 1. 一个 LaTeX 文档的基本结构 承接上一期&…

Latex表格大小调整常见问题汇总

列宽调整 若要调整每列的宽度到指定数值&#xff0c;可以将代码中的 \begin{tabular}{c|ccc}改为 \begin{tabular}{p{xxx}|ccc}其中花括号里面填写宽度数值&#xff0c;如5pt&#xff0c;10mm等。如果需要该列居中&#xff0c;可以写作 \begin{tabular}{p{xxx}<{\center…

Elsevier模板LaTex中编译时出现“! Undefined control sequence.”

问题描述(以下内容仅是我遇到的问题&#xff0c;不一定具有普适性) 使用overleaf模板库里的ElsevierLaTex模板上传到系统后&#xff0c;系统并没有正确的生成pdf&#xff0c;而是生成了报错信息。 后来改用了Elsevier官网的latex模板&#xff0c;但是上传之后还是生成报错信息…

latax中插入表格

下面这篇博客写的很好&#xff0c;这里转载了过来。另外需要补充几点&#xff1a; 1.绘制表格的简单方法 latax绘制复杂表非常的麻烦&#xff0c;故一般采取其他方法。 可以使用Excel2LaTeX插件 https://www.latexstudio.net/archives/6992.html &#xff08;需要安装ms off…

Latex的常见问题及解决方案

制作斜线表头 \usepackage{diagbox} \begin{tabular}{|l|ccc|} \hline \diagbox{Time}{Room}{Day} & Mon & Tue & Wed \\ \hline Morning & used & used & \\ Afternoon & & used & used \\ \hline \end{tabular} 效果如下: 空格表示 …

LaTex学习笔记之命令使用

LaTex学习笔记之命令使用 概要vscode跳转写作环境宏包的使用命令的使用常用命令章节层次列表环境字体字号行内和行间公式分式、根式、矩阵表格的使用插图参考文献的插入 概要 本文章是针对已安装好Tex环境&#xff0c;并已安装好编辑器。这里使用TeXstudio进行编辑。 vscode跳…

LaTeX心得分享之插入表格(下)

接上篇~今天我们主要说&#xff1a; 单元格的合并 单元格的拆分 一、单元格的合并 1、\multicolumn命令 。通常用于合并一行种几个不同列的单元格&#xff0c;适合排版跨列的标头。其基本语法格式&#xff1a; \multicolumn{项数}{新列格式}{名称} 项数&#xff1a;表格的…

LaTeX制表命令使用教程(简要例子+清晰代码)(论文排版)

1.基本格式 \documentclass{article}\begin{document}\begin{tabular}{cc}%一个c表示有一列&#xff0c;格式为居中显示(center) (1,1)&(1,2)\\%第一行第一列和第二列 中间用&连接 (2,1)&(2,2)\\%第二行第一列和第二列 中间用&连接 \end{tabular}\end{docum…