摘要
在研究android Camera2 API的時候,涉及到采集視訊資訊。其中,在采集視訊的時候,可以設定多種類型格式的圖像資料,其中一個就是yuv_420_888,如果需要進行編碼壓縮,我們還需要将該格式的資料轉轉想要的格式後方能根據壓縮算法進行壓縮。本文記錄一下,我所知的幾種常用的yuv資料格式。
介紹
YUV是一種顔色編碼方法,是編譯true-color顔色空間(color space)的種類,常使用在各個視訊處理元件中。 YUV在對照片或視訊編碼時,考慮到人類的感覺能力,允許降低色度的帶寬。其中的“Y”表示明亮度,也就是灰階值,即黑到白的範圍值,是以隻有Y值的圖像,是黑白的,“U”表示色彩值,“V”表示色彩的飽和度,“U”“V”用于指定像素的顔色。
YUV兩大類格式:
平面格式(planar formats)
- 将Y、U、V的三個分量分别存放在不同的矩陣中。先連續存儲所有像素點的Y,緊接着存儲所有像素點的U,随後是所有像素點的V。
緊縮格式(packed formats)
-
将Y、U、V值存儲成MacroPixels數組,和RGB的存放方式類似,每個像素點的Y,U,V是連續交替存儲的。
為節省帶寬起見,大多數YUV格式平均使用的每像素位數都少于24位。主要的抽樣(subsample)格式有YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1和YCbCr4:4:4。
YUV的表示法稱為A:B:C表示法:
4:4:4表示完全取樣。
4:2:2表示2:1的水準取樣,垂直完全采樣。
4:2:0表示2:1的水準取樣,垂直2:1采樣。
4:1:1表示4:1的水準取樣,垂直完全采樣。
圖示
下面圖示幾種常見的yuv存儲格式。
1 YUV444類型
每個像素點都存儲對應的YUV值,是以,在1080x1920的圖像中,需要1080x1920x(1Y + 1U + 1V)(位元組)≈ 0.7MB來存儲。
1.1 I444類型
在螢幕像素上的分布表示:

在數組中存儲的分布表示:
即先存Y,再存U,後存V的格式。
1.2 YV24類型
在螢幕像素上的分布表示:
在數組中存儲的分布表示:
即先存Y,再存V,後存U的格式。
2 YUV422類型
每兩個像素點共用一對UV值,是以,在1080x1920的圖像中,需要1080x1920x(1Y+ 0.5U + 0.5V)(位元組)≈ 0.5MB來存儲。
在螢幕像素上的分布表示:
2.1 YUV422
在數組中存儲的分布表示:
(YUYV)
(YVYU)
2.2 YUV422P
在數組中存儲的分布表示:
YU16、I422
YV16
2.3 YUV422SP
在數組中存儲的分布表示:
NV16
NV61
3 YUV420類型
每四個像素點共用一對UV值,是以,在1080x1920的圖像中,需要1080x1920x(1Y+ 0.25U + 0.25V)(位元組)≈ 0.3MB來存儲。
在螢幕像素上的分布表示:
3.1 YUV420P
在數組中存儲的分布表示:
YU12、I420
YV12
3.2 YUV420SP
在數組中存儲的分布表示:
NV12
NV21
總結
了解了以上的YUV格式後自己才能自由的轉換。