做視頻采集與處理,自然少不了要學(xué)會(huì)分析YUV數(shù)據(jù)。因?yàn)閺牟杉慕嵌葋?lái)說(shuō),一般的視頻采集芯片輸出的碼流一般都是YUV數(shù)據(jù)流的形式,而從視頻處理(例如H.264、MPEG視頻編解碼)的角度來(lái)說(shuō),也是在原始YUV碼流進(jìn)行編碼和解析,所以,了解如何分析YUV數(shù)據(jù)流對(duì)于做視頻領(lǐng)域的人而言,至關(guān)重要。本文就是根據(jù)我的學(xué)習(xí)和了解,簡(jiǎn)單地介紹如何分析YUV數(shù)據(jù)流。
YUV,分為三個(gè)分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。
與我們熟知的RGB類似,YUV也是一種顏色編碼方法,主要用于電視系統(tǒng)以及模擬視頻領(lǐng)域,它將亮度信息(Y)與色彩信息(UV)分離,沒(méi)有UV信息一樣可以顯示完整的圖像,只不過(guò)是黑白的,這樣的設(shè)計(jì)很好地解決了彩色電視機(jī)與黑白電視的兼容問(wèn)題。并且,YUV不像RGB那樣要求三個(gè)獨(dú)立的視頻信號(hào)同時(shí)傳輸,所以用YUV方式傳送占用極少的頻寬。
好了,言歸正傳,談?wù)勅绾畏治鯵UV碼流吧。YUV碼流有多種不同的格式,要分析YUV碼流,就必須搞清楚你面對(duì)的到底是哪一種格式,并且必須搞清楚這種格式的YUV采樣和分布情況。下面我將介紹幾種常用的YUV碼流格式,供大家參考。
YUV碼流的存儲(chǔ)格式其實(shí)與其采樣的方式密切相關(guān),主流的采樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0,關(guān)于其詳細(xì)原理,可以通過(guò)網(wǎng)上其它文章了解,這里我想強(qiáng)調(diào)的是如何根據(jù)其采樣格式來(lái)從碼流中還原每個(gè)像素點(diǎn)的YUV值,因?yàn)橹挥姓_地還原了每個(gè)像素點(diǎn)的YUV值,才能通過(guò)YUV與RGB的轉(zhuǎn)換公式提取出每個(gè)像素點(diǎn)的RGB值,然后顯示出來(lái)。
用三個(gè)圖來(lái)直觀地表示采集的方式吧,以黑點(diǎn)表示采樣該像素點(diǎn)的Y分量,以空心圓圈表示采用該像素點(diǎn)的UV分量。

先記住下面這段話,以后提取每個(gè)像素的YUV分量會(huì)用到。
- YUV 4:4:4采樣,每一個(gè)Y對(duì)應(yīng)一組UV分量。
- YUV 4:2:2采樣,每?jī)蓚€(gè)Y共用一組UV分量。
- YUV 4:2:0采樣,每四個(gè)Y共用一組UV分量。
2. 存儲(chǔ)方式
下面我用圖的形式給出常見(jiàn)的YUV碼流的存儲(chǔ)方式,并在存儲(chǔ)方式后面附有取樣每個(gè)像素點(diǎn)的YUV數(shù)據(jù)的方法,其中,Cb、Cr的含義等同于U、V。
(1) YUVY 格式 (屬于YUV422)

YUYV為YUV422采樣的存儲(chǔ)格式中的一種,相鄰的兩個(gè)Y共用其相鄰的兩個(gè)Cb、Cr,分析,對(duì)于像素點(diǎn)Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00,其他的像素點(diǎn)的YUV取值依次類推。 (2) UYVY 格式 (屬于YUV422)
UYVY格式也是YUV422采樣的存儲(chǔ)格式中的一種,只不過(guò)與YUYV不同的是UV的排列順序不一樣而已,還原其每個(gè)像素點(diǎn)的YUV值的方法與上面一樣。
(3) YUV422P(屬于YUV422)
YUV422P也屬于YUV422的一種,它是一種Plane模式,即平面模式,并不是將YUV數(shù)據(jù)交錯(cuò)存儲(chǔ),而是先存放所有的Y分量,然后存儲(chǔ)所有的U(Cb)分量,最后存儲(chǔ)所有的V(Cr)分量,如上圖所示。其每一個(gè)像素點(diǎn)的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個(gè)Y共用一個(gè)UV。比如,對(duì)于像素點(diǎn)Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00。
(4)YV12,YU12格式(屬于YUV420)
YU12和YV12屬于YUV420格式,也是一種Plane模式,將Y、U、V分量分別打包,依次存儲(chǔ)。其每一個(gè)像素點(diǎn)的YUV數(shù)據(jù)提取遵循YUV420格式的提取方式,即4個(gè)Y分量共用一組UV。注意,上圖中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次類推。
(5)NV12、NV21(屬于YUV420)
NV12和NV21屬于YUV420格式,是一種two-plane模式,即Y和UV分為兩個(gè)Plane,但是UV(CbCr)為交錯(cuò)存儲(chǔ),而不是分為三個(gè)plane。其提取方式與上一種類似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00
3. 總結(jié)
幾種常見(jiàn)的YUV碼流格式就簡(jiǎn)單地列在上面了,大家在處理YUV碼流前,先了解清楚自己的碼流到底屬于哪一種,然后對(duì)應(yīng)進(jìn)行處理。