首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

RGB 與 YUV 色彩空間轉換完整指南:公式、應用與 Overlay 技術

     編輯:關於C++

RGB 色彩空間

加色混合模型,螢幕顯示基礎。常見格式:RGB565 (16-bit)、RGB888 (24-bit)。任意色光 F = r[R] + g[G] + b[B]。

YUV 色彩空間

源自類比電視相容需求:

  • Y:亮度訊號 (Luma),單獨即可構成黑白影像
  • U (Cb):藍色色差 B - Y
  • V (Cr):紅色色差 R - Y

亮度/色度分離優勢:頻寬壓縮 (色度可次取樣)、黑白電視相容。

YUV 取樣格式

  • YUV 4:4:4:Y/U/V 同取樣率,無壓縮
  • YUV 4:2:2:水平色度半取樣 (每 2 像素共用 1 組 UV)
  • YUV 4:2:0:水平垂直皆半取樣 (MPEG/JPEG 標準),資料量最小

RGB ↔ YUV 轉換公式

標準範圍 (0-255) - BT.601 全範圍

Y =  0.299 * R + 0.587 * G + 0.114 * B
U = -0.147 * R - 0.289 * G + 0.436 * B
V =  0.615 * R - 0.515 * G - 0.100 * B

R = Y + 1.140 * V
G = Y - 0.394 * U - 0.581 * V
B = Y + 2.032 * U

視訊範圍 (16-235/16-240) - BT.601 限制範圍 (YCbCr)

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

R = 1.164 * (Y - 16) + 1.596 * (Cr - 128)
G = 1.164 * (Y - 16) - 0.813 * (Cr - 128) - 0.391 * (Cb - 128)
B = 1.164 * (Y - 16) + 2.018 * (Cb - 128)

注意:MPEG/攝影機通常輸出限制範圍,PC 圖形通常為全範圍,混用會導致色階錯誤 (灰階不黑、高光不白)。

YUV Overlay 硬體加速顯示

顯示晶片內建 YUV→RGB 色彩空間轉換與縮放引擎:

  1. 建立 YUV Overlay 表面
  2. 直接寫入 YUV 資料 (Y/U/V 平面或打包格式)
  3. 硬體自動轉換並合成到桌面視窗
  4. 免除 CPU 軟體轉換效能損耗

無硬體支援時,MiniGUI 等框架提供軟體模擬 DisplayYUVOverlay()。

常見應用場景

  • 視訊解碼器輸出 YUV 4:2:0 → 需轉 RGB 顯示
  • 攝影機擷取 YUV 4:2:2 → 編碼前轉 4:2:0
  • 影像處理:亮度調整只需修改 Y,不影響色相
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved