RGB格式解析

2021-08-04 04:05:33 字數 1663 閱讀 2982

rgb的幾種格式和描述

rgb565     每個畫素用16位表示,rgb分量分別使用5位、6位、5位

rgb555     每個畫素用16位表示,rgb分量都使用5位(剩下1位不用)

rgb24      每個畫素用24位表示,rgb分量各使用8位

rgb32      每個畫素用32位表示,rgb分量各使用8位(剩下8位不用)

argb32    每個畫素用32位表示,rgb分量各使用8位(剩下的8位用於表示alpha通道值)

rgb565(我們使用的格式)

使用16位表示乙個畫素,這16位中的5位用於r,6位用於g,5位用於b。

程式中通常使用乙個字(word,乙個字等於兩個位元組)來操作乙個畫素。當讀出乙個畫素後,這個字的各個位意義如下:      

高位元組              低位元組 

r r r r r g g g     g g g b b b b b 

可以組合使用遮蔽字和移位操作來得到rgb各分量的值:  

#define rgb565_mask_red    0xf800 

#define rgb565_mask_green  0x07e0 

#define rgb565_mask_blue   0x001f 

r = (wpixel & rgb565_mask_red) >> 11;   // 取值範圍0-31 

g = (wpixel & rgb565_mask_green) >> 5;  // 取值範圍0-63 

b =  wpixel & rgb565_mask_blue;         // 取值範圍0-31

#define rgb(r,g,b) (unsigned int)( (r|0x08 << 11) | (g|0x08 << 6) | b|0x08 )

#define rgb(r,g,b) (unsigned int)( (r|0x08 << 10) | (g|0x08 << 5) | b|0x08 )

該**可以解決24位與16位相互轉換的問題

rgb555

是另一種16位的rgb格式,rgb分量都用5位表示(剩下的1位不用)。

使用乙個字讀出乙個畫素後,這個字的各個位意義如下:     

高位元組             低位元組 

x r r r r g g       g g g b b b b b       (x表示不用,可以忽略)  

rgb24使用24位來表示乙個畫素,rgb分量都用8位表示,取值範圍為0-255 

rgb32使用32位來表示乙個畫素,rgb分量各用去8位,剩下的8位不用

rgb24

rgb24使用24位來表示乙個畫素,rgb分量都用8位表示,取值範圍為0-255。注意在記憶體中rgb各分量的排列順序為:bgr bgr bgr…。通常可以使用rgbtriple資料結構來操作乙個畫素,它的定義為:

typedef struct tagrgbtriple rgbtriple;

rgb32

rgb32使用32位來表示乙個畫素,rgb分量各用去8位,剩下的8位用作alpha通道或者不用。(argb32就是帶alpha通道的rgb24。)注意在記憶體中rgb各分量的排列順序為:bgra bgra bgra…。通常可以使用rgbquad資料結構來操作乙個畫素,它的定義為:

typedef struct tagrgbquad rgbquad。

YUV格式到RGB格式的轉換

yuyv格式到rgb格式的轉換 yuyv格式如下 y0u0y1v0 y2u1y3v1.說明 乙個y代表乙個畫素,而乙個y和uv組合起來構成乙個畫素,所以第0個畫素y0和第乙個畫素y1都是共用第0個畫素的u0和v0。而每個分量y,u,v都是占用乙個位元組的儲存空間。所以y0u0y1v0相當於兩個畫素,...

YUYV格式到RGB格式的轉換

yuyv格式如下 y0u0y1v0 y2u1y3v1.說明 乙個y代表乙個畫素,而乙個y和uv組合起來構成乙個畫素,所以第0個畫素y0和第乙個畫素y1都是共用第0個畫素的u0和v0。而每個分量y,u,v都是占用乙個位元組的儲存空間。所以y0u0y1v0相當於兩個畫素,占用了4個位元組的儲存空間,平均...

BAYER格式轉RGB格式硬體實現

影象採集的功能一般用ccd和cmos感測器來實現,但是這兩種影象感測器在乙個畫素上智慧型採集rgb顏色的乙個分量,為了獲得最佳的影象效果,需要3個影象感測器分別採集不同的顏色分量,一般的拜爾模型如下圖所示,系統中用到的模型如圖中紅框內所示,攝像頭時鐘是 74.25mhz,畫素是1920 1080 以...