背景
一般視頻采集芯片采集到數(shù)據(jù)都是按照YUV格式輸出抹腿,包括很多現(xiàn)在很多的相機(jī)豆巨。所以對音視頻開發(fā)者來說,掌握YUV知識非常必要的池充。
RGB
RGB是一種顏色空間,以紅(R)綠(G)藍(lán)(B)三基色為坐標(biāo)缎讼。
YUV
YUV也是一種顏色空間收夸,一種編碼格式,當(dāng)初是為了兼容黑白電視和彩色電視機(jī)設(shè)計的血崭。
- Y 表示明亮度(Luminance卧惜、Luma)厘灼,也就是灰階值。
- U咽瓷、V 表示色度(Chrominance 或 Chroma)设凹,描述的是色調(diào)和飽和度
YUV采樣
YUV采樣格式有3種:
- YUV444 采樣: 每1個Y分量對應(yīng)一組UV分量,一個像素共占用(8+8+8)bit = 3byte
- YUV422 采樣: 每2個Y分量對應(yīng)一組UV分量茅姜,一個像素共占用(8+81/2 + 81/2)bit = 2byte
- YUV420 采樣: 每4個Y分量對應(yīng)一組UV分量闪朱,一個像素共占用(8+81/4+81/4) = 1.5byte****
如下圖所示:
實(shí)心圓點(diǎn)表示Y分量,空心圓點(diǎn)表示UV分量
分別介紹一下這三種格式:
YUV444
四個像素為:
[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采樣的碼流為:
Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射出的像素點(diǎn)為:
[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
一張 1920 * 1280 大小的圖片钻洒,如果按照YUV444采樣奋姿,其存儲占用共
(192012808 + 192012808 + 192012808)/8/1024/1024 = 7.03M
這種采樣方式和RGB大小一樣
YUV422
四個像素為:
[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采樣的碼流為:
Y0 U0 Y1 V1 Y2 U2 Y3 U3
映射出的像素點(diǎn)為:
[Y0 U0 V1]、[Y1 U0 V1]素标、[Y2 U2 V3]称诗、[Y3 U2 V3]
一張 1920 * 1280 大小的圖片,如果按照YUV444采樣头遭,其存儲占用共
(192012808 + 1920128081/2 + 1920128081/2)/8/1024/1024 = 4.68M
相比于RGB寓免,節(jié)省了1/3空間
YUV420
圖像像素為:
[Y0 U0 V0]、[Y1 U1 V1]任岸、 [Y2 U2 V2]再榄、 [Y3 U3 V3] [Y5 U5 V5]狡刘、[Y6 U6 V6]享潜、 [Y7 U7 V7] 、[Y8 U8 V8]
?
采樣的碼流為:
Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
?
映射出的像素點(diǎn)為:
[Y0 U0 V5]嗅蔬、[Y1 U0 V5]剑按、[Y2 U2 V7]、[Y3 U2 V7] [Y5 U0 V5]澜术、[Y6 U0 V5]艺蝴、[Y7 U2 V7]、[Y8 U2 V7]
一張 1920 * 1280 大小的圖片鸟废,如果按照YUV444采樣猜敢,其存儲占用共
(192012808 + 1920128081/4 + 1920128081/4)/8/1024/1024 = 3.51M
相比于RGB,節(jié)省了1/2空間
YUV存儲
YUV存儲方式分成兩種:
- packed格式: 打包格式盒延,YUV分量交替存儲缩擂。
- planar格式: 先連續(xù)存儲所有像素點(diǎn)Y分量,再存儲所有像素點(diǎn)的U分量添寺,最后存儲所有像素 點(diǎn)的V分量胯盯。
不同的采樣方式和不同存儲方式組合成很多格式,比如YUYV计露,UYVY,YUV420P,YUV420SP,YU12,YU21,NV12,NV21
YUYV
YUYV是YUV422打包格式博脑,采用打包格式進(jìn)行存儲憎乙,Y 和 UV 分量按照 2:1 比例采樣,每個像素都采集 Y 分量叉趣,每隔一個像素采集它的 UV 分量泞边。
存儲方式:
Y0 U0 Y1 V0 Y2 U2 Y3 V2
Y0 和 Y1 共用 U0 V0 分量,Y2 和 Y3 共用 U2 V2 分量君账。
UYVY
UYVY 也是 YUV422 采樣的存儲格式中的一種繁堡,只不過與 YUYV 排列順序相反。
U0 Y0 V0 Y1 U2 Y2 V2 Y3
YUV422P
YUV422P 屬于 YUV422 的一種乡数,它是一種 planer 模式椭蹄,即 Y、U净赴、V 分別存儲绳矩。
YUV420P 和 YUV420SP
YUV420P 是基于 planar 平面模式進(jìn)行存儲,先存儲所有的 Y 分量玖翅,然后存儲所有的 U 分量或者V 分量翼馆。
同樣,YUV420SP 也是基于 planar 平面模式存儲金度,與 YUV420P 的區(qū)別在于它的 U应媚、V 分量是按照 UV 或者 VU 交替順序進(jìn)行存儲。
YU12 和 YV12
YU12 和 YV12 格式都屬于 YUV 420P 類型猜极,即先存儲 Y 分量中姜,再存儲 U、V 分量跟伏,區(qū)別在于:YU12 是先 Y 再 U 后 V丢胚,而 YV12 是先 Y 再 V 后 U 。
NV12 和 NV21
NV12 和 NV21 格式都屬于 YUV420SP 類型受扳。它也是先存儲了 Y 分量携龟,但接下來并不是再存儲所有的 U 或者 V 分量,而是把 UV 分量交替連續(xù)存儲勘高。
NV12 是 IOS 中有的模式峡蟋,它的存儲順序是先存 Y 分量,再 UV 進(jìn)行交替存儲华望。
NV21 是 安卓 中有的模式蕊蝗,它的存儲順序是先存 Y 分量,在 VU 交替存儲立美。
RGB和YUV轉(zhuǎn)換
RGB轉(zhuǎn)YUV公式如下:
YUV轉(zhuǎn)RGB公式如下:
矩陣表示法如下: