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 以...