YUV,是一種顏色編碼方法,Y表示明亮度(Luminance、Luma),U和V則是色度、濃度(Chrominance、Chroma)。 php
YUV,Y`UV,YCbCr,YPbPr等均可以稱爲YUV,彼此有重疊。 數組
YUV和Y`UV一般用來描述模擬信號,YCbCr與YPbPr則是用來描述數位的影像信號。 佈局
YUV顏色編碼方法相比於RGB的優點體如今兩個方面: 編碼
將亮度信息與色彩信息分離,沒有色彩信息能夠顯示完整的圖像,很好地解決了彩色電視機與黑白電視的兼容問題; 3d
YUV不像RGB要求三個獨立的視頻信號同時傳輸,用YUV方式傳送佔用極少的頻寬。 orm
YUV存儲格式,主要描述像素的Y、U、V份量排列方式,分爲兩種格式:緊縮格式和平面格式。 視頻
緊縮格式(packed formats):將Y、U、V值儲存成Macro Pixels陣列,和RGB的存放方式相似。 blog
平面格式(planar formats):將Y、U、V的三個份量分別存放在不一樣的矩陣中。 內存
YUV採樣方式,主要描述像素Y、U、V份量採樣比例,即表達每一個像素時,Y、U、V份量的數目,一般有三種方式:YUV4:4:4,YUV4:2:2,YUV4:2:0。 get
用三個圖直觀地表示採集的方式,以黑點表示採樣該像點的Y份量,以空心圓圈表示採用該像素點的UV份量。
YUV4:4:4採樣,每個Y對應一組UV份量;YUV4:2:2採樣,每兩個Y共用一組UV份量;YUV4:2:0採樣,每四個Y共用一組UV份量。
常見YUV格式說明:YV十二、IYUV、I420、NV十二、NV21 採樣方式都是4:2:0,其存儲格式都是平面格式,下面簡要說明以上常見格式的內存佈局。
YV12
全部 Y 樣例都會做爲不帶正負號的char值組成的數組首先顯示在內存中。此數組後面緊接着全部 V (Cr) 樣例。V 平面的跨距爲 Y 平面跨距的一半,V 平面包含的行爲 Y 平面包含行的一半。V 平面後面緊接着全部 U (Cb) 樣例,它的跨距和行數與 V 平面相同。
IYUV和I420
IYUV、I420和YV12的內存佈局格式是同樣的,只是U、V份量的順序是相反的,IYUV和I420格式中,U份量緊跟Y份量後,V份量緊跟U份量後,如圖所示。
NV12
全部 Y 樣例都會做爲由不帶正負號的char值組成的數組首先顯示在內存中,而且行數爲偶數。Y 平面後面緊接着一個由不帶正負號的char值組成的數組,其中包含了打包的 U (Cb) 和 V (Cr) 樣例,如圖 所示。當組合的 U-V 數組被視爲一個由 little-endian WORD值組成的數組時,LSB 包含 U 值,MSB 包含 V 值。NV12 是用於 DirectX VA 的首選 4:2:0 像素格式。預期它會成爲支持 4:2:0 視頻的 DirectX VA 加速器的中期要求。
NV21
NV21和NV12的內存佈局是同樣的,只是U、V份量交錯存儲的順序是相反的,NV21格式中,是以V-U的交錯方式存儲,如圖所示。
參考資料: