比較好的文章收集連接: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
每一個色差信道的抽樣率是亮度信道的一半,因此水平方向的色度抽樣率只是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]
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: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 轉 YCbCr(YUV)444
四、 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