https://blog.csdn.net/go_str/article/details/84579452
三、RGB簡介
RGB,其實就是R(red:紅色)+G(green:綠色)+B(blue:藍色);像彩色電視或者計算機顯示屏都是通過這三種顏色按照不同比例混合疊加而構成圖像而顯示的。紅色、綠色和藍色又稱為三基色。之所以稱為‘基色’是因為這三種顏色按照不同比例混合后幾乎可以變成人類示例所能感知的所有顏色。
1、RGB格式
RGB格式若按照編碼存儲方式可以分為RGB555、RGB565、RGB24(RGB888)和RGB32。格式不同是因為在構成一個像素的不同顏色所占的位數以及位數比例不同。具體不同可以參照下面的RGB存儲格式;
2、RGB存儲格式
1)RGB555(高彩色)
RGB555是一種16位的RGB格式,R、G、B分量都用5位來表示,剩下的一位不用,存儲格式如下圖:
假設計算機中存儲某一個像素點的變量為color, 數據類型為short.,那么則有:
R = color & 0x7C00, (獲取高字節的5個bit)
G = color & 0x03E0, (獲取中間5個bit)
B = color & 0x001F, (獲取低字節5個bit)
2)RGB565(高彩色)
RGB565同樣是一種16位的RGB格式,R和B分量用5位來表示,G分量用6位標志。存儲格式如下圖:
假設計算機中存儲某一個像素點的變量為color, 數據類型為short, 那么則有:
R = color & 0xF800, (獲取高字節的5個bit)
G = color & 0x07E0, (獲取中間6個bit)
B = color & 0x001F, (獲取低字節5個bit)
3)RGB24(真彩色)
RGB24是一種24位的RGB格式,R、G、B分量都用8位來表示,每位取值范圍都為0-255。存儲格式如下圖:
假設計算機中存儲某一個像素點的變量為color, 數據類型為int, 那么則有:
R = color & 0x000000FF,
G = color & 0x0000FF00,
B = color & 0x00FF0000,
4)RGB32(真彩色)
RGB32使用32位來表示一個像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。Alpha通道是一個8位的灰度通道,該通道用256級灰度來記錄圖像中的透明度信息,定義透明、不透明和半透明區域,其中白表示不透明,黑表示透明,灰表示半透明。其結構如下:
假設計算機中存儲某一個像素點的變量為color, 數據類型為int,那么則有:
a、低8位保留
R = color & 0x0000FF00
G = color & 0x00FF0000,
B = color & 0xFF000000,
b、低8位為ALPHA值
R = color & 0x0000FF00,
G = color & 0x00FF0000,
B = color & 0xFF000000,
A = color & 0x000000FF,
三、RGB與YUV
1、RGB與YUV的關聯
關於RGB與YUV之間的關聯性,並不是特別了解,但是從網上找到了這么一句話感覺很合理:“基本上所有圖像算法都是基於yuv的;而所有顯示面板都是接收rgb數據”,側面的理解是在進行顏色數據運算時使用的是YUV顏色編碼,而對圖像經過后期處理進行顯示時則用的是RGB編碼。暫時記錄這么多,后續了解更清楚再進行補充。
2、RGB與YUV的轉換
關於RGB與YUV之間的轉換,有如下一條公式:
1)、YUV(256 級別) 可以從8位 RGB 直接計算:
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
2)、反過來,RGB 也可以直接從YUV (256級別) 計算:
R = Y + 1.402 (Cr-128)
G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)
B = Y + 1.772 (Cb-128)