1、YUV經常使用格式ide
YUV是編譯true-color顏色空間(color space)的種類,Y'UV, YUV, YCbCr,YPbPr等專有名詞均可以稱爲YUV,彼此有重疊。「Y」表示明亮度(Luminance、Luma),「U」和「V」則是色度與濃度(Chrominance、Chroma)spa
YUV格式有兩大類:packed和planar。注:planar還分平面存儲和平面打包格式。orm
經常使用的CODEC格式-planar,如圖:blog
YV12內存
NV12it
W即圖像的寬度,H即圖像的高度,Stride表示圖像行的跨度,超出W部分爲填充數據,主要目的是爲了字節對齊,通常以16字節或者或者32字節對齊居多。io
從左側數據存儲結構圖看出高度(H)是分層次的,YV12三層和NV12兩層,這個層次結構稱爲 Plane,即YV12在代碼中用 Plane[0]表示Y數據的起始地址,Plane[1]表示V數據的起始地址,Plane[1]表示U數據的起始地址。
而NV12的UV是在一個Plane中交錯存放,所以用兩個Plane表示便可。編譯
從右側的數據排布圖可見YV12和NV12都是YUV 4:2:0採樣,每四個Y共用一組UV份量,已用顏色標明Y一、Y二、Y七、Y8共用U一、V1,而且在內存中連續排布。打包
2、YUV拓展知識方法
YUV格式主要的採樣格式有YCbCr 4:2:0、YCbCr 4:2:二、YCbCr 4:1:1和 YCbCr 4:4:4。
用三個圖來直觀地表示採集的方式,黑點表示採樣該像素點的Y份量,以空心圓圈表示採樣該像素點的UV份量:
YUV 4:4:4採樣,每個Y對應一組UV份量。
YUV 4:2:2採樣,每兩個Y共用一組UV份量。
YUV 4:2:0採樣,每四個Y共用一組UV份量。
(1) YUVY 格式 (屬於YUV422)
YUYV爲YUV422採樣的存儲格式中的一種,相鄰的兩個Y共用其相鄰的兩個Cb、Cr,分析,對於像素點Y'00、Y'01 而言,其Cb、Cr的值均爲 Cb00、Cr00,其餘的像素點的YUV取值依次類推。
YU12和YV12屬於YUV420格式,也是一種Plane模式,將Y、U、V份量分別打包,依次存儲。其每個像素點的YUV數據提取遵循YUV420格式的提取方式,即4個Y份量共用一組UV。注意,上圖中,Y'00、Y'0一、Y'十、Y'11共用Cr00、Cb00,其餘依次類推。
(5)NV十二、NV21(屬於YUV420)
NV12和NV21屬於YUV420格式,是一種two-plane模式,即Y和UV分爲兩個Plane,可是UV(CbCr)爲交錯存儲,而不是分爲三個plane。其提取方式與上一種相似,即Y'00、Y'0一、Y'十、Y'11共用Cr00、Cb00
注:
YUV420P,Y,U,V三個份量都是平面格式,分爲I420和YV12。I420格式和YV12格式的不一樣處在U平面和V平面的位置不一樣。在I420格式中,U平面緊跟在Y平面以後,而後纔是V平面(即:YUV);但YV12則是相反(即:YVU)。
YUV420SP, Y份量平面格式,UV打包格式, 即NV12。 NV12與NV21相似,U 和 V 交錯排列,不一樣在於UV順序。
I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP