视频编解码中的基本图像格式

0 阅读3分钟

1. RGB 格式

  • RGB888

    • 每像素3字节,分别为R(红)、G(绿)、B(蓝),每个通道8位(0-255)。
    • 数据排列:R、G、B依次存储。
    • 示例:像素(0, 0, 255)为纯蓝色。
    • 分辨率为1920x1080的图片占用字节:1920 x 1080 x 3 = 6,220,800字节(约5.9MB)。
    • 优点:色彩还原度高。
    • 缺点:体积大,占用存储空间多。
  • RGBA8888

    • 在RGB基础上增加Alpha通道(透明度),共4字节。
    • 数据排列:R、G、B、A。

2. YUV 格式

  • YUV原理

    • Y:亮度(灰度),U/V:色度(色差信号)。
    • 优点:利用人眼对亮度敏感、色彩不敏感的特性,便于压缩。
  • YUV常见采样格式:

    • YUV444:Y、U、V每个像素各有一份(无压缩,最高质量)。

    • YUV422:每两个像素共用一份U和V,减少1/3色度数据,常用于视频采集。

    • YUV420:每四个像素共用一份U和V,节省一半空间,主流视频编码使用。

      • 典型应用:视频编码(如H.264/H.265)、网络视频传输等。
      • 分辨率为1920x1080的图片占用字节:1920 x 1080 x 1.5 = 3,110,400字节(约2.96MB)。
  • YUV420常见子格式:

    • I420 (YU12) :Y...U...V...
    • YV12:Y...V...U...
    • NV12:Y...UVUVUV...
    • NV21:Y...VUVUVU...

I420内存分布示意图 分辨率为 8x6 的图像,YUV的排布方式。

image-20250703150015564.png

3.色域与色彩标准

YUV 与 RGB 不同,YUV 每个分量的取值范围由色彩标准(色域)决定。

常用色彩标准

  • BT.601 标清(SD),适用于分辨率 720x576(PAL)、720x480(NTSC)等低于1280x720。
  • BT.709 高清(HD),适用于分辨率 1280x720、1920x1080。
  • BT.2020 超高清(UHD),适用于4K/8K及更高分辨率。

色彩范围

1. 全范围(Full Range)

  • Y 分量(亮度) :0 ~ 255
  • U/V 分量(色度) :0 ~ 255

2. 有限范围(Limited Range)

  • Y 分量:16 ~ 235
  • U/V 分量:16 ~ 240
  • Full Range 常用于PC图像处理等场景。
  • Limited Range 主要用于视频编码与电视、广播标准。

注:在 YUV 与 RGB 转换时,需注意色彩标准与范围的对应。若范围不一致,可能出现色偏或对比度不正常等问题。

以下是常用色域转换公式:

1. BT.601

YUV(Limited Range)→ RGB

C = Y - 16
D = U - 128
E = V - 128R = 1.164 * C + 1.596 * E
G = 1.164 * C - 0.392 * D - 0.813 * E
B = 1.164 * C + 2.017 * D

RGB→ YUV(Limited Range)

Y = 0.257 * R + 0.504 * G + 0.098 * B + 16
U = -0.148 * R - 0.291 * G + 0.439 * B + 128
V = 0.439 * R - 0.368 * G - 0.071 * B + 128

YUV(Full Range)→ RGB

C = Y
D = U - 128
E = V - 128R = C + 1.402   * E
G = C - 0.34414 * D - 0.71414 * E
B = C + 1.772   * D

RGB→ YUV(Full Range)

Y =  0.299   * R + 0.587   * G + 0.114   * B
U = -0.168736* R - 0.331264* G + 0.5     * B + 128
V =  0.5     * R - 0.418688* G - 0.081312* B + 128

2. BT.709

YUV(Limited Range)→ RGB

C = Y - 16
D = U - 128
E = V - 128R = 1.164 * C + 1.793 * E
G = 1.164 * C - 0.213 * D - 0.534 * E
B = 1.164 * C + 2.115 * D

RGB → YUV(Limited Range)

Y = 0.183 * R + 0.614 * G + 0.062 * B + 16
U = -0.101 * R - 0.338 * G + 0.439 * B + 128
V = 0.439 * R - 0.399 * G - 0.040 * B + 128

YUV(Full Range)→ RGB

C = Y
D = U - 128
E = V - 128R = C + 1.5748  * E
G = C - 0.1873  * D - 0.4681  * E
B = C + 1.8556  * D

RGB → YUV(Limited Range)

Y =  0.2126  * R + 0.7152  * G + 0.0722  * B
U = -0.11457 * R - 0.38543 * G + 0.5     * B + 128
V =  0.5     * R - 0.45415 * G - 0.04585 * B + 128
标准色卡(RGB888)

colorfull.png