YUV格式到RGB格式的轉換

luckywang1103發表於2013-12-10

YUYV格式到RGB格式的轉換: 

為什麼YUYV格式要轉到RGB格式,視訊的顯示呼叫的多數API都是基於RGB格式,所以需要進行格式的轉換。


YUYV格式如下: 

Y0U0Y1V0 Y2U1Y3V1.......... 

說明:一個Y代表一個畫素,而一個Y和UV組合起來構成一個畫素,所以第0個畫素Y0和第一個畫素Y1都是共用第0個畫素的U0和V0。而每個分量Y,U,V都是佔用一個位元組的儲存空間。所以Y0U0Y1V0相當於兩個畫素,佔用了4個位元組的儲存空間,平均一個畫素佔用兩個位元組。 


RGB格式: 

R0G0B0 R1G1B1......... 

說明:一個畫素由三個分量構成,即一個畫素佔用三個位元組。 


先區分一下YUV和YCbCr

YUV色彩模型來源於RGB模型,

該模型的特點是將亮度和色度分離開,從而適合於影象處理領域。

應用:模擬領域

Y'= 0.299*R' + 0.587*G' + 0.114*B'

U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'-Y')

V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'-Y')

R' = Y' + 1.140*V'

G' = Y' - 0.394*U' - 0.581*V'

B' = Y' + 2.032*U'

YCbCr模型來源於YUV模型。YCbCr是YUV 顏色空間的偏移版本.

應用:數字視訊,ITU-RBT.601建議

Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16

Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128

Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128

R' = 1.164*(Y’-16) + 1.596*(Cr'-128)

G' = 1.164*(Y’-16) - 0.813*(Cr'-128) -0.392*(Cb'-128)

B' = 1.164*(Y’-16) + 2.017*(Cb'-128)

PS: 上面各個符號都帶了一撇,表示該符號在原值基礎上進行了伽馬校正,伽馬校正有助於彌補在抗鋸齒的過程中,線性分配伽馬值所帶來的細節損失,使影象細節更加豐富。在沒有采用伽馬校正的情況下,暗部細節不容易顯現出來,而採用了這一影象增強技術以後,影象的層次更加明晰了。

所以說H264裡面的YUV應屬於YCbCr,也可以點http://www.fourcc.org/yuv.php獲得其他一些資訊.


相關文章