【圖像處理基礎】RGB的解析

還是圖像處理的東西,想想這些都是基礎,還是做一下總結

1.RGB介紹

RGB色彩是工業界的一種顏色標準,是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍三個通道的顏色,這個標準幾乎包括了人類視力所能感知的所有顏色,是運用最廣的顏色系統之一。三原色Red, Green, Blue, 每一種顏色值的範圍是0~255,所以每一個顏色用1個字節=8個bit便可完全在計算機內部表示出來。而R, G, B不同的組合幾乎產生了所有的顏色,當然自然界中的顏色比這些要遠遠豐富很多,採用R, G, B的方式,如果以24色深表示的話,在計算機中可表示的顏色數量有2^8 2 ^8 2 ^8 = 16777216種顏色。

 

2.RGB原理

RGB是從顏色發光的原理來設計定的,通俗點說它的顏色混合方式就好像有紅、綠、藍三盞燈,當它們的光相互疊合的時候,色彩相混,而亮度卻等於三者亮度之總和,越混合亮度越高,即加法混合。

 

3.RGB表示形式

浮點表示方式: 取值範圍爲 0.0 ~ 1.0(如在 OpenGL 中對每個子像素點的表示就是使用這個表示方式)。

整數表示: 取值範圍爲 0 ~ 255 或者 00 ~ FF(如 RGBA_8888RGB_565)。

 

4.RGB格式(不管什麼格式,從高到低都是BGR排列)

就是說的RGB數據的排列方式以及分量佔的位數,這裏有個問題就是如何在不知情的情況下去確定圖片的RGB格式是什麼?

答案:可以去查看圖片的屬性,裏面有圖片的深度,如果爲24即說明一個像素點就是佔24位,當然RGB的格式就是RGB24。

如果要是16位呢,該怎麼判斷呢,到底是565還是555呢,可以編程隨機取一些像素點最高位進行判斷,如果都一樣則肯定555。

(1)RGB555

每一個像素用 16 個 bit(2個字節)來表示,但最高位不用R 用 5 個 bitG 用 5 個 bitB 用 5 個 bit 表示。

實際編程中獲取具體像素值方法:(假設 color 爲存儲某一個像素點的變量,數據爲16位)

  • R = color & 0x7C00 // 獲取高字節 5 個 bit
  • G = color & 0x03E0 // 獲取中間的 5 個 bit
  • B = color & 0x001F // 獲取低字節 5 個 bit

(2)RGB565

每一個像素用 16 個 bit(2 個字節)來表示,R 用 5 個 bitG 用 6 個 bitB 用 5 個 bit 表示。

實際編程中獲取具體像素值方法:(假設 color 爲存儲某一個像素點的變量,數據爲16位)

  • R = color & 0xF800 // 獲取高字節 5 個 bit
  • G = color & 0x07E0 // 獲取中間的 6 個 bit
  • B = color & 0x001F // 獲取低字節 5 個 bit

(3)RGB24(24=8+8+8)

每一個像素用 24 個 bit(3個字節)來表示,RGB 均用 8 bit 表示。

實際編程中獲取具體像素值方法:(假設 color 爲存儲某一個像素點的變量,數據爲16位)

  • R = color & 0x0000FF
  • G = color & 0x00FF00
  • B = color & 0xFF0000

(4)RGB32

 每一個像素用 32 個 bit(4個字節)來表示,RGB 均用 8 bit 表示,最後 1 個字節保留(或者用作alpha通道用稱爲ARGB)

實際編程中獲取具體像素值方法:(假設 color 爲存儲某一個像素點的變量,數據爲32位)

  • R = color & 0x0000FF00
  • G = color & 0x00FF0000
  • B = color & 0xFF000000

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章