YUV各种格式对比

目录

1、YUV420P

1.1、YU12 I420

1.2、YV12

2、YUV420SP

2.1、NV12

2.2、NV21

3、YUV和RGB转换

4、分离YUV分量

5、YUV 采样

YUV 4:4:4

YUV 4:2:2

YUV 4:2:0

YUV 4:1:1

6、Planar Format

UYVY

YUYV

Planar

Semi-Planar

7、关系图

8、计算

YUV计算文件大小

YUV计算帧数

sample map

9、一些常用格式

YUV格式关系

10、常见的YUV格式存储排列方式


1、YUV420P

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

1.1、YU12 I420

这个wiki上面的图片示例非常明了,第一个图标识了图片真正像素的表示。可 以看到Y1, Y2, Y7, Y8这些物理上相近的4个像素公用了同样的U1和V1,相似的Y3,Y4,Y9,Y10用的就是U2和V2。这里不同的颜色把这个特性刻画的非常形象,一 目了然。Impressive!!一直觉得教育,或者说基础的教育一定要以这样的模式来阐述这样才能知其所以然,那种盲目的抄了一本国外的教材或者合并了 几本破书的教材不是教人是毁人。 说远了,言归正传。之前说的是物理像素的表示,在内存中的分布则是一个数组,顺序就是YUV。所以如果知道所要表现的取悦的大小的话很容易查找到具体的YUV在数组中的位置。

1.2、YV12

与YU12唯一区别是V在前U在后,把上图5行与6行对调即可。

2、YUV420SP

YUV420SP格式的图像阵列,首先是所有Y值,然后是UV或者VU交替存储,NV12和NV21属于YUV420SP格式,是一种two-plane模式,即Y和UV分为两个plane,但是UV(CbCr)为交错存储,而不是像YUV420格式那样分为三个平面。主要分为:NV21和NV12。

NV12和YV12稍有不同,区别就在UV的位置。再看一张图就很明了了!

2.1、NV12

存储顺序是先存Y值,再UV交替存储:YYYYUVUVUV,以 4 × 4 图片为例子,占用内存为 4 × 4 × 3 / 2 = 24 个字节

在YV12中U和V都是连续排布的,而在NV12中,U和V就交错排布的。看到内存中的排布很清楚,先开始都是Y,之后的都是U1V1U2V2的交错式排布。对于像素的压缩的效果是一样的。但是可能是硬件加速的支持与否。

2.2、NV21

存储顺序是先存Y值,再VU交替存储:YYYYVUVUVU,以 4 × 4 图片为例子,占用内存为 4 × 4 × 3 / 2 = 24 个字节

与NV12唯一区别是V在前U在后,把上图5行与6行中的U与V对调即可。

3、YUV和RGB转换

Y =(0.257* R)+(0.504* G)+(0.098* B)+16

U =(0.439* R)-(0.368* G)-(0.071* B)+128

V =-(0.148* R)-(0.291* G)+(0.439* B)+128

R =1.164*(Y -16)+2.018*(U -128)

G =1.164*(Y -16)+0.813*(V -128)-0.391*(U -128)

B =1.164*(Y -16)+1.596*(V -128)

4、分离YUV分量

I420: YYYYYYYY UU VV    =>YUV420P
YV12: YYYYYYYY VV UU    =>YUV420P
NV12: YYYYYYYY UV UV     =>YUV420SP
NV21: YYYYYYYY VU VU     =>YUV420SP
YV12 : 亮度(行×列) + U(行×列/4) + V(行×列/4)
I420 : 亮度(行×列) + V(行×列/4) + U(行×列/4)

5、YUV 采样

色度通道的采样率可以低于亮度通道,而不会显著降低感知质量。

4:4:4 表示完全取样。

4:2:2 表示2:1的水平取样,垂直完全采样。

4:2:0 表示2:1的水平取样,垂直2:1采样。

4:1:1 表示4:1的水平取样,垂直完全采样。

最常用Y:UV记录的比重通常1:1或2:1,Video是以YUV4:2:0的方式记录,也就是我们俗称的I420,YUV4:2:0并不是说只有U(即Cb),V(即Cr)一定为0,而是指U:V互相援引,时见时隐,也就是说对于每一个行,只有一个U或者V分量,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0…以此类推。至于其他常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等。

YUV 4:4:4

完全取样,每个像素都有独立的Y/U/V值

为了方便对比,我们挑画面下方横条渐变色块6x5个像素放大40倍,看像素的YUV值(其它采样也取相同位置)。

从如下图所示,可以看出相邻的像素点的Y/U/V值不相等也可以看出每个像素都有独立的U/V值

YUV 4:2:2

每两个Y共用一对U/V值

422采样,水平方向每两个像素共用一对U/V值,下如图绿色框(U channel)和蓝色框(V channel)标记的一个框在内存中只有一个值。

YUV 4:2:0

每四个Y共用一对U/V值

420采样,因为是相邻的4个像素共用一对U/V,所以会出现如下图所示,每四个相邻的像素就出现4个相同的UV值。

YUV 4:1:1

与YUV 4:2:0类似,都是四个每四个Y共用一对U/V值,区别是4:1:1是水平方向的4个Y共享一对U/V,如下图所示,第1-4个Y使用同一对U/V值,第5-8个Y使用同一对U/V值,依次类推。。。

这里就不截图举例了,由于411采样的不太常用的以致于一般工具都不支持播放,有了422的例子其实也好更多,411相当于在422的基础上再在水平方向下采样,即水平方向每连续4个像素共用一对UV。

6、Planar Format

planar format

Packed (or Interleaved)

将YUV三个分量的素数值放在同一个阵列中,存储为单个阵列宏像素

将每个像素点的Y/U/V连续交叉存储

以UYVY、YUYV为例,由两个像素的Y/U/V组成一个宏像素,依次排列

UYVY

U0Y0V0Y1 U2Y2V2Y3 U4Y4V4Y5 U6Y6V6Y7 …

YUYV

Y0U0Y1V0 Y2U2Y3V2 Y4U4Y5V4 Y6U6Y7V6 …

Planar

每个分量存储为单独的数组,最终图像是三个单独平面的整合

以I420为例Y/U/V排列如下:

width: 图像分辨率的宽 height: 分辨率高 n = width * height m = width * height / 4 Y0Y1Y2Y3Y4Y5…Yn U0U1U2U3…Um V0V1V2V3…Vm

Semi-Planar

介于Pakced和Planar之间,即Y分量为一个阵列,UV交叉存储

NV12

width: 图像分辨率的宽 height: 分辨率高 n = width * height m = width * height / 4 Y0Y1Y2Y3Y4Y5…Yn U0V0U1V1U2V2U3V3…UmVm

Note: 格式的名称以“ p”结尾的一般都是planar格式,如在ffmpeg 中的yuvj420p格式 格式的名称以“ sp”结尾的一般都是semi-planar格式

7、关系图

8、计算

由于YUV格式是未经压缩并且只存储了Y/U/V三个通道的数据,播放或编码必须要知道分辨率和YUV具体的格式(如nv12/i420/yuvj420ple), 因此在YUV文件命名时建议名字包含YUV格式名称和分辨率信息

这里计算文件大小或者计算帧数中的采样率和位深可由YUV格式得到

YUV计算文件大小

已知YUV采样率、分辨率、和帧数

文件大小=宽 * 高 * 采样率 * 向上取整(位深/8) * 帧数

file size(byte) = width * height * rate * Ceil(bitdepth/8) * frames

以最常用的nv12/i420等8bit位深的420为例

文件大小 = 宽 * 高 * 1.5 * 帧数

YUV计算帧数

YUV帧数的计算和文件大小的计算类似

要求已知文件大小、采样率、分辨率

YUV帧数=文件大小/(宽 * 高 * 采样率 * 向上取整(位深/8))

YUV frames = file size(byte) / (width * height * rate * Ceil(bitdepth/8))

sample map

sample

rate

4:4:4

3

4:2:2

2

4:2:0

1.5

4:1:1

1.5

大小端序(字节序)

当位深超过8bit时存在大小端模式的情况

big-edian(大端序): 低地址存放高位
little-endian(小端序): 低地址存放低位
格式名称以le为小端序,格式名称以be为小端序
相同名称只是后缀不一样的两种格式YUV排列是完全一样的, 如,yuv420p10le与yuv420p10be

9、一些常用格式

YUV格式关系

YUV格式名称比较多在不同的地方不同的名称有可能代表的是同一种格式,如在ffmpeg中的yuyv422与gstreamer 中的yuy2,以及其它不它的格式名称YUY2/YUYV/YUNV, 都是代表同一种YUV格式。

ffmpeg pix_fmt

gstreamer format

Duplicate formats

number of components

Bits per pixel

remark

yuvj420p

i420

IYUV/YU12

3

12

full range

yuv420p

-

3

12

limited range , 排列方式与yuvj420p完全一致,只是像素颜色范围是[16,235], 16表示黑色,235表示白色; UV范围[16,240]

nv12

nv12

3

12

-

nv21

nv21

3

12

-

yuyv422

yuy2

YUY2/YUYV/YUNV

3

16

YUYV 4:2:2

uyvy422

uyvy

UYVY/IUYV/HDYC/ UYNV/Y422

3

16

UYVY 4:2:2

yuv420p10le

i420-10le

3

15

10 bit yuv

p010le

p010-10le

3

15

10 bit yuv

yv12

-

3

12

YV12 (3-planar) ——These formats are identical to YU12 except that the U and V plane order is reversed.

10、常见的YUV格式存储排列方式

Define:

s = width * height

n = width * height // 4

m = width * height // 2

I420/IYUV/YU12: yuv420 planar 的一种, 排列方式: y1y2y3…ysu1u2u3…unv1v2v3…vn
nv12: 8bit YUV420 Semi-Planar的一种格式, 排列方式: y1y2y3…ysu1v1u2v2u3v3…unvn
nv21: 8bit YUV420 Semi-Planar的一种格式, 排列方式: y1y2y3…ysv1u1v2u2…vnun
i420-10le: 10bit YUV420 Planar的一种格式, 排列方式与i420一样, 只是每个值都用10bit低字节序来存储
p010-10le: 10bit YUV420 Semi-Planar的一种格式, 排列方式与nv12一样, 只是每个值都用高10bit低字节序来存储
YUY2/YUYV/YUNV: 8bit YUV 4:2:2格式, 排列方式: y1u1y2v1 y3u2y4v2 y5u3y6v3…yn-1umynvm
UYVY/IUYV/HDYC/UYNV/Y422: 8bit YUV 4:2:2格式, 排列方式: u1y1v1Y2 u2y3v2y4 u3y5v3y6…umyn-1vmyn
yv12: YUV420 Planar的一种,UV的顺序与i420相反, 排列方式: y1y2y3y…ynv1v2v3…vnu1u2u3…un
YUV422P/I422: y1y2y3…ysu1u2u3…umv1v2v3…vm
nv16: yuv422 Semi-Planar的一种: y1y2y3…ys u1v1u2v2u3v3…umvm
nv61: 与nv16类似,只是u/v的位置互换(V前U后)
yv16: yuv422 Planar的一种: y1y2y3…ysu1u2u3…umv1v2v3…vm
yuvj444p: Planar的一种: y1y2y3y…ys u1u2u3…us v1v2v3…vs

其它4:1:1采样的格式一般不太常见

Y41P: 是一种4:1:1packed格式,其中U和V每四个像素水平采样一次。每个宏像素在三个字节中包含8个像素,并具有以下字节布局:U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y7
Y41T与Y41P相同,除了每个Y样本的最低有效位指定色度键(0 =透明,1 =不透明)。
AI44是一种已标准化的YUV格式,每个样本8位。每个样本在4个最高有效位(MSB)中包含一个索引,在4个最低有效位(LSB)中包含一个alpha值。索引引用YUV调色板条目的数组,必须在该格式的媒体类型中定义。此格式主要用于子图片图像。

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: YUV格式的图像通常是用于视频处理的,其中Y表示亮度分量,U和V表示颜色分量。这种图像格式在计算机视觉、数字信号处理、视频压缩等领域中广泛使用。下面介绍几种常见的打开YUV格式图像的方法。 1. 使用视频播放器:常见的视频播放器如Potplayer、VLC等都支持打开YUV格式的图像文件,只需将文件拖动到播放器窗口即可打开。 2. 使用Matlab:Matlab是一种常见的科学计算软件,也可以用于图像处理。在Matlab中打开YUV格式图像需要使用`yuvread()`函数,该函数可以读取和显示YUV格式的文件。 3. 使用Python:Python是一种常见的编程语言,也可以用于图像处理。使用Python打开YUV格式图像需要使用相应的库,如OpenCV或PyAV等,同时需要编写相应的代码实现图像的读取和显示。 无论是使用视频播放器、Matlab还是Python,打开YUV格式图像都需要注意一些细节。例如,需要确定图像的尺寸和颜色空间,不同的YUV格式可能会有不同的解码方式,需要根据具体的需要进行相应的设置和调整。 ### 回答2: YUV是一种用于存储图像或视频的格式,在计算机图形和多媒体处理中应用广泛。下面是一个简单的步骤,告诉您如何打开YUV格式的图像。 首先,您需要一个图像查看器或多媒体播放器,它支持YUV格式。一些常见的软件包括VLC媒体播放器、PotPlayer、Photoshop和FFmpeg工具等。 其次,确保您已经将需要打开的YUV文件保存在计算机的某个位置。通常,YUV图像文件的扩展名为.yuv。 接下来,打开您选择的图像查看器或多媒体播放器。对于VLC媒体播放器,您只需点击"媒体"菜单中的"打开文件"选项,然后选择要打开的YUV文件。 对于PotPlayer,您可以使用类似的方法。单击"文件"菜单,然后选择"打开"选项,找到YUV文件并点击"打开"。 如果您想使用Photoshop打开YUV文件,可以选择文件菜单中的"打开"选项,并选择YUV文件。在打开对话框中,您还可以选择将其打开为灰度图像、RGB图像或其他特定颜色空间的图像。 另外,您还可以使用FFmpeg工具在命令行中打开YUV文件。您可以编写一个简单的命令,指定输入文件和所需的输出格式。例如,"ffmpeg -s 1920x1080 -i input.yuv output.png"可以将YUV文件转换为PNG图像。 最后,一旦您成功打开了YUV格式的图像文件,您可以使用相应的软件进行浏览、编辑、处理或转换等操作,以满足您的需要。 总而言之,打开YUV格式图像需要一个支持该格式的软件,并根据软件的指导打开文件。 ### 回答3: YUV格式是一种用于存储彩色图像的文件格式,常用于视频压缩和流媒体传输。要打开YUV格式的图像,可以按照以下步骤进行。 首先,需要一个支持YUV格式的图像编辑软件或播放器。常见的软件包括Adobe Premiere、VirtualDub和VLC媒体播放器等。在电脑上安装这些软件后,可以直接打开YUV文件。 另外,还可以通过使用YUV转换工具将YUV文件转换为其他常见的图像格式,例如JPEG或PNG。这些转换工具可以在互联网上找到,并且有多个免费和付费的选项可供选择。 打开YUV格式图像时,可以选择加载整个图像或者仅选择加载其中的部分区域。然后,可以使用软件提供的功能来编辑图像,如调整亮度和对比度、改变颜色饱和度、添加滤镜效果等。 需要注意的是,YUV格式图像通常由分为亮度(Y)和色度(UV)两个分量组成,因此在查看或编辑YUV图像时,确保正确理解和处理这些分量是非常重要的。 总结起来,要打开YUV格式图像,可以通过使用支持YUV格式的软件或转换工具,或者将文件转换为其他常见的图像格式来实现。在打开和处理YUV图像时,需要注意其分量的特性,以便正确对图像进行查看和编辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值