Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

YUV 格式深度解析:採樣制、存儲佈局與 420/422 互轉算法

編輯:Linux 教學

YUV 基礎概念

  • Y:亮度(Luma),決定圖像明暗,單獨 Y 即為灰度圖。
  • U/V (Cb/Cr):色度,描述顏色飽和度與色相。
  • 優勢:亮色分離兼容黑白電視,頻寬需求遠低於 RGB 同步傳輸。

採樣制與數據量關係

格式採樣描述每像素位數數據量比例
YUV 4:4:4每 Y 對應一組 UV24 bit1.0×
YUV 4:2:2每 2 Y 共用一組 UV(水平 2:1)16 bit0.67×
YUV 4:2:0每 4 Y (2×2 區塊) 共用一組 UV12 bit0.5×

存儲格式分類

Planar(平面模式)

三分量分開連續存放:所有 Y → 所有 U → 所有 V。

  • I420 (YUV420P):Y → U → V
  • YV12:Y → V → U(U/V 順序互換)

Packed(打包/交錯模式)

像素級交錯存放。

  • YUYV / YVYU / UYVY / VYUY:YUV422 打包,兩像素共用 UV,順序不同。

Semi-Planar(兩平面模式)

Y 獨立一平面,UV 交錯打包第二平面。

  • NV12:Y → UV 交錯(U 在前)
  • NV21:Y → VU 交錯(V 在前)

YUV420 內存佈局計算(以 720×480 為例)

總大小 = W × H × 1.5 字節
Y 平面:W × H           = 720 × 480     字節
U 平面:W × H / 4       = 720 × 480 / 4 字節
V 平面:W × H / 4       = 720 × 480 / 4 字節
存儲順序:Y 連續 → U 連續 → V 連續(I420)或 Y → V → U(YV12)

422 ↔ 420 簡易轉換

  • 422 → 420:Y 不變,UV 在垂直方向隔行抽樣(丟棄奇數行或偶數行 UV)。
  • 420 → 422:Y 不變,每行 UV 複製一份形成連續兩行相同 UV。

YUV420SP (NV12) 90° 旋轉算法參考

public static void rotateYUV240SP(byte[] src, byte[] des, int width, int height) {
    int wh = width * height;
    // 旋轉 Y 平面
    int k = 0;
    for (int i = 0; i < width; i++) {
        for (int j = 0; j < height; j++) {
            des[k++] = src[width * j + i];
        }
    }
    // 旋轉 UV 平面 (交錯存儲)
    for (int i = 0; i < width; i += 2) {
        for (int j = 0; j < height / 2; j++) {
            des[k++] = src[wh + width * j + i];     // U
            des[k++] = src[wh + width * j + i + 1]; // V
        }
    }
}

常見格式對照表

別名採樣存儲類型平面順序
I420420Planar (3-plane)Y → U → V
YV12420Planar (3-plane)Y → V → U
NV12420Semi-Planar (2-plane)Y → UV (U first)
NV21420Semi-Planar (2-plane)Y → VU (V first)
YUYV422PackedY0 U0 Y1 V0
UYVY422PackedU0 Y0 V0 Y1
YUV422P422Planar (3-plane)Y → U → V

工程落地提示

  • 確認攝像頭/解碼器輸出格式(v4l2-ctl --list-formats-ext),避免格式不匹配導致色彩異常。
  • NV12/NV21 常用於 Android MediaCodec、GPU 紋理上傳,轉換時注意 UV 交錯順序。
  • I420/YV12 是 x264/FFmpeg 內部標準格式,推薦作為統一中間格式。
Copyright © Windows教程網 All Rights Reserved