音视频基础知识:RGB 与 YUV 的采样与存储

本文深入探讨RGB和YUV色彩空间的采样和存储格式,包括RGB的1:1:1采样和不同顺序的存储,以及YUV的4:4:4、4:2:2、4:2:0采样格式。重点解析了YUV的打包模式、平面模式和半平面模式的存储方式,并举例说明了错误的采样和存储格式可能导致的颜色异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天,我们将继续深入学习 RGB、YUV 的相关内容,进一步了解它们的常见采样格式和存储格式。

色彩的采样格式和存储格式影响我们处理图像的方式,只有使用正确的方式,才能呈现正确的图像效果。

RGB 的采样和存储


我们已经知道,图像由像素组成,而像素通过记录色彩空间各分量呈现各种各样的色彩。对于 RGB 色彩空间,其三个分量 R(红)、G(绿)、B(蓝),它们之间具有相关性,对于色彩的表示来说缺一不可。

所以,RGB 的每个像素都会完整采样三个分量,采样比例为 1:1:1(指每个分量的采样数,而非每个分量的数值)。也正是因为这种采样要求,RGB 颜色空间在采集上不好进行数据压缩,不太适用于视频图像的编码、传输。

RGB 三个分量采样后,在内存中是依次排列存储的。但是,它们的存储顺序不一定是字面描述的 R、G、B。不同的应用场景,因处理逻辑差异可能会使用不同的规则。比如,MATLAB 使用的存储顺序为 R、G、B,而 OpenCV 则使用 B、G、R,如下图所示:

R、G、B 顺序

B、G、R 顺序

我们把 RGB 字面描述的分量顺序,称为字面序,将其实际存储的分量顺序,称为字节序。确定好色彩空间存储的字节序,是正确处理图像的前提,如果随意对各分量进行读取,可能会导致处理后的颜色出现异常。下图,即为使用 RGB 顺序读取字节序为 BGR 的图片的效果,此时,由于将 B、R 分量混淆了,得到了错误的图片颜色。

左一:原图,存储格式为 BGR;左二:使用 RGB 格式进行读取

另外,大家还也会接触到 BGRA 这样的存储格式(比如在 iOS、MAC 上处理摄像头数据),其中的 A ,表示在 RGB 三个通道基础上,增加了一个透明度通道 Alpha,用于调整色彩的透明度,实现更丰富的色彩效果。对于增加了透明度的RGB,同样需要留意其实际的存储顺序,常见的有 BGRA、RGBA、ABGR 和 ARGB 等等。

总之,RGB 的采样格式、存储格式相对比较简单,我们也不做过多的展开。正如上篇文章所述,在视频处理领域,YUV 色彩空间才是主角,它的采样格式、存储格式相对于 RGB 也更加复杂

YUV的采样和存储


1、YUV 的采样格式


大家已经知道,区别于 RGB 色彩空间,YUV 色彩空间的三个分量并非都参与颜色的表示,即便仅存在亮度分量 Y,也能呈现黑白灰的图像轮廓。而人眼对于色度分量 U、V 不是特别敏感,减少一些也不会太影响观感。这种特性体现到采样上,意味着允许我们少采集 U、V 分量、甚至于不采集 U、V 分量(黑白图像),从而在采集上实现可观的数据压缩。按 U、V 分量的采集方式不同,主流的 YUV 采样格式有:YUV 4:4:4,YUV 4:2:2 和 YUV 4:2:0 几种。

看到 “ YUV A:B:C ” 这种标识格式,大家是否很容易将其理解为 “ Y:U:V = A:B:C ”?这种理解是符合直觉的,但并不正确。实际上, "A:B:C" 格式并不是将 YUV 拆分为 3 个分量、然后按 A:B:C 的比例采集,而是基于一个 “宽度为 A 个像素、高度为 2 个像素” 的采样区域,将 UV 分量作为一个整体进行采样,然后描述 UV 分量组相对于 Y 分量的采样率。

宽 A 个像素、高 2 个像素的区域

上面的解释可能比较笼统,要理解 YUV A:B:C 的采样逻辑,我们可以将其先进行拆解,整理为清晰可参考的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值