最近项目中用到了好多 YUV 格式相关的东西,在网上找了一些资料,整理如下:
计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用 R(Red)、G(Green)、B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。这种色彩的表示方法称为 RGB 色彩空间表示(它也是多媒体计算机技术中用得最多的一种色彩空间表示方法)。
根据三基色原理,任意一种色光 F 都可以用不同分量的 R、G、B 三色相加混合而成。
F = r [ R ] + g [ G ] + b [ B ]
其中,r、g、b 分别为三基色参与混合的系数。当三基色分量都为 0(最弱)时混合为黑色光;而当三基色分量都为 k(最强)时混合为白色光。调整 r、g、b 三个系数的值,可以混合出介于黑色光和白色光之间的各种各样的色光。
那么 YUV 又从何而来呢?在现代彩色电视系统中,通常采用三管彩色摄像机或彩色 CCD 摄像机进行摄像,然后把摄得的彩色图像信号经分色、分别放大校正后得到 RGB,再经过矩阵变换电路得到亮度信号 Y 和两个色差信号 R-Y(即 U)、B-Y(即 V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的 YUV 色彩空间表示。
采用 YUV 色彩空间的重要性是它的亮度信号 Y 和色度信号 U、V 是分离的。如果只有 Y 信号分量而没有 U、V 分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用 YUV 空间正是为了用亮度信号 Y 解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
YUV 与 RGB 相互转换的公式如下(RGB 取值范围均为 0-255):
Y = 0.299R + 0.587G + 0.114B
U = -0.147R – 0.289G + 0.436B
V = 0.615R – 0.515G – 0.100B
R = Y + 1.14V
G = Y – 0.39U – 0.58V
B = Y + 2.03U
在 DirectShow 中,常见的 RGB 格式有 RGB1、RGB4、RGB8、RGB565、RGB555、RGB24、RGB32、ARGB32 等;常见的 YUV 格式有 YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、 YUV411、YUV420 等。作为视频媒体类型的辅助说明类型(Subtype),它们对应的 GUID 见表 2.3。
表 2.3 常见的 RGB 和 YUV 格式
GUID 格式描述
MEDIASUBTYPE_RGB1 2 色,每个像素用 1 位表示,需要调色板
MEDIASUBTYPE_RGB4 16 色,每个像素用 4 位表示,需要调色板
MEDIASUBTYPE_RGB8 256 色,每个像素用 8 位表示,需要调色板
MEDIASUBTYPE_RGB565 每个像素用 16 位表示,RGB 分量分别使用 5 位、6 位、5 位
MEDIASUBTYPE_RGB555 每个像素用 16 位表示,RGB 分量都使用 5 位(剩下的 1 位不用)
MEDIASUBTYPE_RGB24 每个像素用 24 位表示,RGB 分量各使用 8 位
MEDIASUBTYPE_RGB32 每个像素用 32 位表示,RGB 分量各使用 8 位(剩下的 8 位不用)
MEDIASUBTYPE_ARGB32 每个像素用 32 位表示,RGB 分量各使用 8 位(剩下的 8 位用于表示 Alpha 通道值)
MEDIASUBTYPE_YUY2 YUY2 格式,以 4:2:2 方式打包
MEDIASUBTYPE_YUYV YUYV 格式(实际格式与 YUY2 相同)
MEDIASUBTYPE_YVYU YVYU 格式,以 4:2:2 方式打包
MEDIASUBTYPE_UYVY UYVY 格式,以 4:2:2 方式打包
MEDIASUBTYPE_AYUV 带 Alpha 通道的 4:4:4 YUV 格式
MEDIASUBTYPE_Y41P Y41P 格式,以 4:1:1 方式打包
MEDIASUBTYPE_Y411 Y411 格式(实际格式与 Y41P 相同)
MEDIASUBTYPE_Y211 Y211 格式
MEDIASUBTYPE_IF09 IF09 格式
MEDIASUBTYPE_IYUV IYUV 格式
MEDIASUBTYPE_YV12 YV12 格式
MEDIASUBTYPE_YVU9 YVU9 格式
- ThinkPad x13 Gen1傲腾H10重装系统的麻烦(0)
- Win10系统电脑进入安全模式的四种方法,让你轻松应对各种问题(0)
- 【Python】修改Windows中 pip 的缓存位置与删除 pip 缓存(1)
- 记录问题解决的连接(0)
- Python 格式化输出 —— 小数转化为百分数(0)
- ThinkPad x13 Gen1傲腾H10重装系统的麻烦(0)
- Win10系统电脑进入安全模式的四种方法,让你轻松应对各种问题(0)
- 【Python】修改Windows中 pip 的缓存位置与删除 pip 缓存(1)
- 记录问题解决的连接(0)
- Python 格式化输出 —— 小数转化为百分数(0)