RGB和YUV、YCbCr 以及格式的轉換總結

比較好的文章收集連接:html

https://www.douban.com/note/76361504/spa

http://blog.sina.com.cn/s/blog_a85e142101010h8n.html視頻


基礎知識  htm

【1】RGBblog

    RGB(紅綠藍)是依據人眼識別的顏色定義出的空間,可表示大部分顏色。但在科學研究通常不採用RGB顏色空間,由於它的細節難以進行數字化的調整。它將色調,亮度,飽和度三個量放在一塊兒表示,很難分開。它是最通用的面向硬件的彩色模型。該模型用於彩色監視器和一大類彩色視頻攝像。內存

【2】YUVget

    在 YUV 空間中,每個顏色有一個亮度信號 Y,和兩個色度信號 U 和 V。亮度信號是強度的感受,它和色度信號斷開,這樣的話強度就能夠在不影響顏色的狀況下改變。產品

    YUV 使用RGB的信息,但它從全綵色圖像中產生一個黑白圖像,而後提取出三個主要的顏色變成兩個額外的信號來描述顏色。把這三個信號組合回來就能夠產生一個全綵色圖像。it

    Y 通道描述 Luma 信號,它與亮度信號有一點點不一樣,值的範圍介於亮和暗之間。 Luma 是黑白電視能夠看到的信號。U (Cb) 和 V (Cr) 通道從紅 (U) 和藍 (V) 中提取亮度值來減小顏色信息量。這些值能夠重新組合來決定紅,綠和藍的混合信號。基礎

YUV(YCbCr)採樣格式:

    主要的採樣格式有YCbCr 4:2:0、YCbCr 4:2:二、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr 4:1:1 比較經常使用,其含義爲:每一個點保存一個 8bit 的亮度值(也就是Y值), 每 2 x 2 個點保存一個 Cr和Cb值, 圖像在肉眼中的感受不會起太大的變化。因此, 原來用 RGB(R,G,B 都是 8bit unsigned) 模型, 每一個點須要 8x3=24 bits, 而如今僅須要 8+(8/4)+(8/4)=12bits, 平均每一個點佔12bits。這樣就把圖像的數據壓縮了一半。

上邊僅給出了理論上的示例,在實際數據存儲中是有多是不一樣的,下面給出幾種具體的存儲形式:

    (1) YUV 4:4:4

  YUV三個信道的抽樣率相同,所以在生成的圖像裏,每一個像素的三個份量信息完整(每一個份量一般8比特),通過8比特量化以後,未經壓縮的每一個像素佔用3個字節。

  下面的四個像素爲: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的碼流爲: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

(2) YUV 4:2:2

  每一個色差信道的抽樣率是亮度信道的一半,因此水平方向的色度抽樣率只是4:4:4的一半。對非壓縮的8比特量化的圖像來講,每一個由兩個水平方向相鄰的像素組成的宏像素須要佔用4字節內存(例以下面映射出的前兩個像素點只須要Y0、Y一、U0、V1四個字節)。

  下面的四個像素爲: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的碼流爲:       Y0 U0 Y1 V1 Y2 U2 Y3 V3

  映射出像素點爲:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

(3) YUV 4:1:1

  4:1:1的色度抽樣,是在水平方向上對色度進行4:1抽樣。對於低端用戶和消費類產品這仍然是能夠接受的。對非壓縮的8比特量化的視頻來講,每一個由4個水平方向相鄰的像素組成的宏像素須要佔用6字節內存

  下面的四個像素爲: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的碼流爲: Y0 U0 Y1 Y2 V2 Y3

  映射出像素點爲:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

(4)YUV4:2:0

  4:2:0並不意味着只有Y,Cb而沒有Cr份量。它指得是對每行掃描線來講,只有一種色度份量以2:1的抽樣率存儲。相鄰的掃描行存儲不一樣的色度份量,也就是說,若是一行是     4:2:0的話,下一行就是4:0:2,再下一行是4:2:0...以此類推。對每一個色度份量來講,水平方向和豎直方向的抽樣率都是2:1,因此能夠說色度的抽樣率是4:1。對非壓縮的8比特量化的視頻來講,每一個由2x2個2行2列相鄰的像素組成的宏像素須要佔用6字節內存。

      下面八個像素爲:

      [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  [Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]

      存放的碼流爲:

      Y0 U0 Y1 Y2 U2 Y3

   Y5 V5 Y6 Y7 V7 Y8

      映射出的像素點爲:

      [Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

      [Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]

 


 

格式轉化

一、RGB888 轉 RGB565

三個字:取高位

{ R[7:0] , G[7:0] , B[7:0] } -----> { R[4:0] , G[5:0] , B[4:0] }

二、RGB565 轉 RGB888

三個字 : 補低位

 { R[4:0] , G[5:0] , B[4:0] } ------>{ {R[4:0], R[2:0]}, {G[5:0],G[1:0]}, {B[4:0],B[2:0] } }

三、RGB888 轉 YCbCrYUV)444

Y = 0.299R + 0.587G + 0.114B
Cb= - 0.172R- 0.339G + 0.511B + 128
Cr = 0.511R - 0.428G - 0.083B + 128

四、 YCbCr 444 轉 RGB 888

R = 1.164Y + 1.596Cr - 222.912
G = 1.164Y - 0.391Cb - 0.813Cr + 135.488
B = 1.164Y + 2.018Cb - 276.928

原文連接: http://www.cnblogs.com/aslmer/p/6058165.html 

相關文章
相關標籤/搜索