閱讀225 返回首頁    go 阿裏雲 go 技術社區[雲棲]


什麼是YUV、RGB?

  • 由來

    • 通常我們用RGB表示一種彩色。計算機係統裏的LCD顯示的數據就是RGB來表示每個像素的顏色。而在我們生活裏,有黑白電視機與彩色電視機兩種,拍攝節目源時不可以用兩種不同的攝像機來存放兩種圖像數據。所以為了兼容兩種電視機,專家就引入YUV格式代替RGB,其中Y表示亮度, U和V表示色差。 黑白電視機隻用Y信號, 而彩色電視機可由YUV轉換成RGB再顯示顏色。通常我們所用的YUV格式是 ITU-R 的標準 , 也叫YCbCr.
  • YUV與RGB的換算規則

    Y     Y = 0.299 x R + 0.587 x G + 0.114 x B + 0 
    U    Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128 
    V    Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128 
    
  • YUV4:4:4

    • 其實就是YUV的數據各占用8位, 每個像素都由YUV組成
    • 同一行的相鄰4個像素數據:
      Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3 存儲時: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
      即每個像素YUV的數據都會存放起來,為什麼叫4:4:4? 意思就是4個像素裏的數據有4個Y, 4個U, 4個V
  • YUV4:2:2

    • 其實絕大部分相鄰的兩個像素,數據差異應不大。所以為了節省空間便於存儲,丟失每個像素的部分數據。專家研究表 明我們人對亮度比較敏感,而對色彩不怎麼敏感。所以每個像素的亮度Y數據是絕對不動的,而色差數據可以進行丟棄。 同一行的相鄰4個像素數據: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3 存儲時: Y0 U0 Y1 V1 Y2 U2 Y3 V3,每兩個相鄰的像素, 一個丟棄V數據,一個丟棄U數據 為什麼叫4:2:2?意思就是相鄰的4個像素裏有4個Y, 2個U, 2個V。 按上麵存儲的順序也叫YUYV。但還原成RGB數據必須需要YUV, 像第一個像素隻有Y0U0是沒法還原的,這時隻能用下一像素的V1數據。還原時的YUV: [Y0U0V1] [Y1U0V1] [Y2U2V3] [Y3U2V3],這樣還原理論上會對圖像的質量有影響的,但我們看不出來的.
  • YUV4:2:0

    • 專家們進一步研究表示,每一行的相鄰兩個像素與下一行同位置的兩個像素數據差異不大,可以進一步的丟數據。如兩行的像素數據:

      Y00U00V00 Y01U01V01 Y02U02V02 Y03U03V03 ....
      Y88U88V88 Y89U89V89 Y90U90V90 Y91U91V91 ....
      存儲時:Y00U00 Y01 Y02U02 Y03 ,每個像素的Y數據保留, 兩個像素數據隻保留一個U數據。這一行不保留V數據(YUV: 420),Y88V88 Y89 Y90V90 Y91,兩個像素數據隻保留一個V數據, 這行不保留U數據(YUV: 402),還原時隻能相同位置的上下兩行4個像素結合還原:

      Y00U00V88  Y01U00V88  Y02U02V90  Y03U02V90
      Y88U00V88  Y89U00V88  Y90U02V90  Y91U02V90
      

      下一節介紹YUV數據兩種存儲方式(平麵、打包)

最後更新:2017-09-04 00:03:05

  上一篇:go  我的全站https之路
  下一篇:go  阿裏雲 ssl證書手把手教程 及nginx文件配置 安裝完成後出現下載彈出窗問題的解決