轉自:http://blog.csdn.net/linweig/article/details/5515928
YUV(亦稱YCrCb)是被歐洲電視系統所采用的一種顏色編碼方法(屬於PAL),是PAL和SECAM模擬彩色電視制式采用的顏色空間。其中的Y,U,V幾個字母不是英文單詞的組合詞,Y代表亮度,uv代表色差,u和v是構成彩色的兩個分量。在現代彩色電視系統中,通常采用三管彩色攝影機或彩色CCD攝影機進行取像,然后把取得的彩色圖像信號經分色、分別放大校正后得到RGB,再經過矩陣變換電路得到亮度信號Y和兩個色差信號R-Y(即U)、B-Y(即V),最后發送端將亮度和色差三個信號分別進行編碼,用同一信道發送出去。這種色彩的表示方法就是所謂的YUV色彩空間表示。采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有 Y信號分量而沒有U、V信號分量,那么這樣表示的圖像就是黑白灰度圖像。彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機的相容問題,使黑白電視機也能接收彩色電視信號。
YUV主要用於優化彩色視頻信號的傳輸,使其向后相容老式黑白電視。與RGB視頻信號傳輸相比,它最大的優點在於只需占用極少的頻寬(RGB要求三個獨立的視頻信號同時傳輸)。其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定像素的顏色。“亮度”是透過RGB輸入信號來建立的,方法是將RGB信號的特定部分疊加到一起。“色度”則定義了顏色的兩個方面─色調與飽和度,分別用Cr和CB來表示。其中,Cr反映了GB輸入信號紅色部分與RGB信號亮度值之間的差異。而CB反映的是RGB輸入信號藍色部分與RGB信號亮度值之同的差異。
采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有Y信號分量而沒有U、V分量,那么這樣表示的圖像就是黑白灰度圖像。彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機的兼容問題,使黑白電視機也能接收彩色電視信號。
YUV與RGB相互轉換的公式如下(RGB取值范圍均為0-255)︰
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
在DirectShow中,常見的RGB格式有RGB1、RGB4、RGB8、RGB565、RGB555、RGB24、RGB32、ARGB32等;常見的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等。
主要的采樣格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr 4:1:1 比較常用,其含義為:每個點保存一個 8bit 的亮度值(也就是Y值),每 2x2 個點保存一個 Cr 和Cb 值, 圖像在肉眼中的感覺不會起太大的變化。所以, 原來用 RGB(R,G,B 都是 8bit unsigned) 模型, 4 個點需要 8x3=24 bites(如下圖第一個圖)。而現在僅需要 8+(8/4)+(8/4)=12bites, 平均每個點占12bites(如下圖第二個圖)。這樣就把圖像的數據壓縮了一半。
上邊僅給出了理論上的示例,在實際數據存儲中是有可能是不同的,下面給出幾種具體的存儲形式:
(1) YUV 4:4:4
YUV三個信道的抽樣率相同,因此在生成的圖像里,每個象素的三個分量信息完整(每個分量通常8比特),經過8比特量化之后,未經壓縮的每個像素占用3個字節。
下面的四個像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的碼流為: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
(2) YUV 4:2:2
每個色差信道的抽樣率是亮度信道的一半,所以水平方向的色度抽樣率只是4:4:4的一半。對非壓縮的8比特量化的圖像來說,每個由兩個水平方向相鄰的像素組成的宏像素需要占用4字節內存。
下面的四個像素為:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的碼流為:Y0 U0 Y1 V1 Y2 U2 Y3 V3
映射出像素點為:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
(3) YUV 4:1:1
4:1:1的色度抽樣,是在水平方向上對色度進行4:1抽樣。對於低端用戶和消費類產品這仍然是可以接受的。對非壓縮的8比特量化的視頻來說,每個由4個水平方向相鄰的像素組成的宏像素需要占用6字節內存。
下面的四個像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的碼流為: Y0 U0 Y1 Y2 V2 Y3
映射出像素點為:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
(4)YUV4:2:0
4:2:0並不意味着只有Y,Cb而沒有Cr分量。它指得是對每行掃描線來說,只有一種色度分量以2:1的抽樣率存儲。相鄰的掃描行存儲不同的色度分量,也就是說,如果一行是4:2:0的話,下一行就是4:0:2,再下一行是4:2:0...以此類推。對每個色度分量來說,水平方向和豎直方向的抽樣率都是2:1,所以可以說色度的抽樣率是4:1。對非壓縮的8比特量化的視頻來說,每個由2x2個2行2列相鄰的像素組成的宏像素需要占用6字節內存。
下面八個像素為:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]
存放的碼流為:Y0 U0 Y1 Y2 U2 Y3
Y5 V5 Y6 Y7 V7 Y8
映射出的像素點為:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]
[Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]
YUV格式通常有兩大類:打包(packed)格式和平面(planar)格式。前者將YUV分量存放在同一個數組中,通常是幾個相鄰的像素組成一個宏像素(macro-pixel);而后者使用三個數組分開存放YUV三個分量,就像是一個三維平面一樣。表2.3中的YUY2到Y211都是打包格式,而IF09到YVU9都是平面格式。(注意:在介紹各種具體格式時,YUV各分量都會帶有下標,如Y0、U0、V0表示第一個像素的YUV分量,Y1、U1、V1表示第二個像素的YUV分量,以此類推。)
¨ YUY2(和YUYV)格式為每個像素保留Y分量,而UV分量在水平方向上每兩個像素采樣一次。一個宏像素為4個字節,實際表示2個像素。(4:2:2的意思為一個宏像素中有4個Y分量、2個U分量和2個V分量。)圖像數據中YUV分量排列順序如下:
Y0 U0 Y1 V0 Y2 U2 Y3 V2 …
¨ YVYU格式跟YUY2類似,只是圖像數據中YUV分量的排列順序有所不同:
Y0 V0 Y1 U0 Y2 V2 Y3 U2 …
¨ UYVY格式跟YUY2類似,只是圖像數據中YUV分量的排列順序有所不同:
U0 Y0 V0 Y1 U2 Y2 V2 Y3 …
¨ AYUV格式帶有一個Alpha通道,並且為每個像素都提取YUV分量,圖像數據格式如下:
A0 Y0 U0 V0 A1 Y1 U1 V1 …
¨ Y41P(和Y411)格式為每個像素保留Y分量,而UV分量在水平方向上每4個像素采樣一次。一個宏像素為12個字節,實際表示8個像素。圖像數據中YUV分量排列順序如下:
U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y8 …
¨ Y211格式在水平方向上Y分量每2個像素采樣一次,而UV分量每4個像素采樣一次。一個宏像素為4個字節,實際表示4個像素。圖像數據中YUV分量排列順序如下:
Y0 U0 Y2 V0 Y4 U4 Y6 V4 …
¨ YVU9格式為每個像素都提取Y分量,而在UV分量的提取時,首先將圖像分成若干個4 x 4的宏塊,然后每個宏塊提取一個U分量和一個V分量。圖像數據存儲時,首先是整幅圖像的Y分量數組,然后就跟着U分量數組,以及V分量數組。IF09格式與YVU9類似。
¨ IYUV格式為每個像素都提取Y分量,而在UV分量的提取時,首先將圖像分成若干個2 x 2的宏塊,然后每個宏塊提取一個U分量和一個V分量。YV12格式與IYUV類似。
¨ YUV411、YUV420格式多見於DV數據中,前者用於NTSC制,后者用於PAL制。YUV411為每個像素都提取Y分量,而UV分量在水平方向上每4個像素采樣一次。YUV420並非V分量采樣為0,而是跟YUV411相比,在水平方向上提高一倍色差采樣頻率,在垂直方向上以U/V間隔的方式減小一半色差采樣,如上圖所示。
YUV是指亮度參量和色度參量分開表示的像素格式,而這樣分開的好處就是不但可以避免相互干擾,還可以降低色度的采樣率而不會對圖像質量影響太大。 YUV是一個比較籠統地說法,針對它的具體排列方式,可以分為很多種具體的格式。轉載一篇對yuv格式解釋的比較清楚地文章,也可以直接參考微軟的那篇文 章。
對於YUV格式,比較原始的講解是MPEG-2 VIDEO部分的解釋,當然后來微軟有一個比較經典的解釋,中文的大多是翻譯這篇文章的。文章來源:http://msdn.microsoft.com/en-us/library/aa904813(VS.80).aspx
這里轉載有人已經翻譯過的,個人認為已經翻譯的很不錯了,遂放棄翻譯。
http://hondrif82q.spaces.live.com/blog/cns!776E82726DE60562!177.entry
http://hondrif82q.spaces.live.com/blog/cns!776E82726DE60562!178.entry
YUV格式解析1(播放器——project2)
YUV 采樣
YUV 的優點之一是,色度頻道的采樣率可比 Y 頻道低,同時不會明顯降低視覺質量。有一種表示法可用來描述 U 和 V 與 Y 的采樣頻率比例,這個表示法稱為 A:B:C 表示法:
• | 4:4:4 表示色度頻道沒有下采樣。 |
• | 4:2:2 表示 2:1 的水平下采樣,沒有垂直下采樣。對於每兩個 U 樣例或 V 樣例,每個掃描行都包含四個 Y 樣例。 |
• | 4:2:0 表示 2:1 的水平下采樣,2:1 的垂直下采樣。 |
• | 4:1:1 表示 4:1 的水平下采樣,沒有垂直下采樣。對於每個 U 樣例或 V 樣例,每個掃描行都包含四個 Y 樣例。與其他格式相比,4:1:1 采樣不太常用,本文不對其進行詳細討論。 |
圖 1 顯示了 4:4:4 圖片中使用的采樣網格。燈光樣例用叉來表示,色度樣例則用圈表示。

圖 1. YUV 4:4:4 樣例位置
4:2:2 采樣的這種主要形式在 ITU-R Recommendation BT.601 中進行了定義。圖 2 顯示了此標准定義的采樣網格。

圖 2. YUV 4:2:2 樣例位置
4:2:0 采樣有兩種常見的變化形式。其中一種形式用於 MPEG-2 視頻,另一種形式用於 MPEG-1 以及 ITU-T recommendations H.261 和 H.263。圖 3 顯示了 MPEG-1 方案中使用的采樣網格,圖 4 顯示了 MPEG-2 方案中使用的采樣網格。

圖 3. YUV 4:2:0 樣例位置(MPEG-1 方案)

圖 4. YUV 4:2:0 樣例位置(MPEG-2 方案)
與 MPEG-1 方案相比,在 MPEG-2 方案與為 4:2:2 和 4:4:4 格式定義的采樣網格之間進行轉換更簡單一些。因此,在 Windows 中首選 MPEG-2 方案,應該考慮將其作為 4:2:0 格式的默認轉換方案。
表面定義
本節講述推薦用於視頻呈現的 8 位 YUV 格式。這些格式可以分為幾個類別:
• | 4:4:4 格式,每像素 32 位 |
• | 4:2:2 格式,每像素 16 位 |
• | 4:2:0 格式,每像素 16 位 |
• | 4:2:0 格式,每像素 12 位 |
首先,您應該理解下列概念,這樣才能理解接下來的內容:
• | 表面原點。對於本文講述的 YUV 格式,原點 (0,0) 總是位於表面的左上角。 |
• | 跨距。表面的跨距,有時也稱為間距,指的是表面的寬度,以字節數表示。對於一個表面原點位於左上角的表面來說,跨距總是正數。 |
• | 對齊。表面的對齊是根據圖形顯示驅動程序的不同而定的。表面始終應該 DWORD 對齊,就是說,表面中的各個行肯定都是從 32 位 (DWORD) 邊界開始的。對齊可以大於 32 位,但具體取決於硬件的需求。 |
• | 打包格式與平面格式。YUV 格式可以分為打包 格式和平面 格式。在打包格式中,Y、U 和 V 組件存儲在一個數組中。像素被組織到了一些巨像素組中,巨像素組的布局取決於格式。在平面格式中,Y、U 和 V 組件作為三個單獨的平面進行存儲。 |
4:4:4 格式,每像素 32 位
推薦一個 4:4:4 格式,FOURCC 碼為 AYUV。這是一個打包格式,其中每個像素都被編碼為四個連續字節,其組織順序如下所示。

圖 5. AYUV 內存布局
標記了 A 的字節包含 alpha 的值。
4:2:2 格式,每像素 16 位
支持兩個 4:2:2 格式,FOURCC 碼如下:
• | YUY2 |
• | UYVY |
兩個都是打包格式,其中每個巨像素都是編碼為四個連續字節的兩個像素。這樣會使得色度水平下采樣乘以系數 2。
YUY2
在 YUY2 格式中,數據可被視為一個不帶正負號的 char 值組成的數組,其中第一個字節包含第一個 Y 樣例,第二個字節包含第一個 U (Cb) 樣例,第三個字節包含第二個 Y 樣例,第四個字節包含第一個 V (Cr) 樣例,如圖 6 所示。

圖 6. YUY2 內存布局
如果該圖像被看作由兩個 little-endian WORD 值組成的數組,則第一個 WORD 在最低有效位 (LSB) 中包含 Y0,在最高有效位 (MSB) 中包含 U。第二個 WORD 在 LSB 中包含 Y1,在 MSB 中包含 V。
YUY2 是用於 Microsoft DirectX® Video Acceleration (DirectX VA) 的首選 4:2:2 像素格式。預期它會成為支持 4:2:2 視頻的 DirectX VA 加速器的中期要求。
UYVY
此格式與 YUY2 相同,只是字節順序是與之相反的 — 就是說,色度字節和燈光字節是翻轉的(圖 7)。如果該圖像被看作由兩個 little-endian WORD 值組成的數組,則第一個 WORD 在 LSB 中包含 U,在 MSB 中包含 Y0,第二個 WORD 在 LSB 中包含 V,在 MSB 中包含 Y1。

圖 7. UYVY 內存布局
4:2:0 格式,每像素 16 位
推薦兩個 4:2:0 每像素 16 位格式,FOURCC 碼如下:
• | IMC1 |
• | IMC3 |
兩個 FOURCC 碼都是平面格式。色度頻道在水平方向和垂直方向上都要以系數 2 來進行再次采樣。
IMC1
所有 Y 樣例都會作為不帶正負號的 char 值組成的數組首先顯示在內存中。后面跟着所有 V (Cr) 樣例,然后是所有 U (Cb) 樣例。V 和 U 平面與 Y 平面具有相同的跨距,從而生成如圖 8 所示的內存的未使用區域。

圖 8. IMC1 內存布局
IMC3
此格式與 IMC1 相同,只是 U 和 V 平面進行了交換:

圖 9. IMC3 內存布局
4:2:0 格式,每像素 12 位
推薦四個 4:2:0 每像素 12 位格式,FOURCC 碼如下:
• | IMC2 |
• | IMC4 |
• | YV12 |
• | NV12 |
在所有這些格式中,色度頻道在水平方向和垂直方向上都要以系數 2 來進行再次采樣。
IMC2
此格式與 IMC1 相同,只是 V (Cr) 和 U (Cb) 行在半跨距邊界處進行了交錯。換句話說,就是色度區域中的每個完整跨距行都以一行 V 樣例開始,然后是一行在下一個半跨距邊界處開始的 U 樣例(圖 10)。此布局與 IMC1 相比,能夠更加高效地利用地址空間。它的色度地址空間縮小了一半,因此整體地址空間縮小了 25%。在各個 4:2:0 格式中,IMC2 是第二首選格式,排在 NV12 之后。

圖 10. IMC2 內存布局
IMC4
此格式與 IMC2 相同,只是 U (Cb) 和 V (Cr) 行進行了交換:

圖 11. IMC4 內存布局
YV12
所有 Y 樣例都會作為不帶正負號的 char 值組成的數組首先顯示在內存中。此數組后面緊接着所有 V (Cr) 樣例。V 平面的跨距為 Y 平面跨距的一半,V 平面包含的行為 Y 平面包含行的一半。V 平面后面緊接着所有 U (Cb) 樣例,它的跨距和行數與 V 平面相同(圖 12)。

圖 12. YV12 內存布局
NV12
所有 Y 樣例都會作為由不帶正負號的 char 值組成的數組首先顯示在內存中,並且行數為偶數。Y 平面后面緊接着一個由不帶正負號的 char值組成的數組,其中包含了打包的 U (Cb) 和 V (Cr) 樣例,如圖 13 所示。當組合的 U-V 數組被視為一個由 little-endian WORD 值組成的數組時,LSB 包含 U 值,MSB 包含 V 值。NV12 是用於 DirectX VA 的首選 4:2:0 像素格式。預期它會成為支持 4:2:0 視頻的 DirectX VA 加速器的中期要求。

YUV格式解析2
每秒25幀,每幀兩場,掃描線(包括電視機的電子束)自上而下先掃描一場,然后再自上而下掃描第二場
之所以引入場的概念,我的理解是主要為了在有限的帶寬和成本內使畫面運動更加平滑和消除閃爍感。
這兩個場的掃描線是一條一條互相間隔開的,比如說對於一個幀來講,最上面一條線編號為0,緊挨着的是1,再下來是2,3,4,5,6。。。。那么第一場也許是0,2,4,6;也許是1,3,5,7——這就是隔行掃描
在逐行掃描模式下,就是掃描線按照0,1,2,3,4,5的順序依次掃描,很明顯,這時候就不存在場的概念了。
4:4:4采樣就是說三種元素Y,Cb,Cr有同樣的分辨率,這樣的話,在每一個像素點上都對這三種元素進行采樣.數字4是指在水平方向上對於各種 元素的采樣率,比如說,每四個亮度采樣點就有四個Cb的Cr采樣值.4:4:4采樣完整地保留了所有的信息值.4:2:2采樣中(有時記為YUY2),色 度元素在縱向與亮度值有同樣的分辨率,而在橫向則是亮度分辨率的一半(4:2:2表示每四個亮度值就有兩個Cb和Cr采樣.)4:2:2視頻用來構造高品 質的視頻彩色信號.
在流行的4:2:0采樣格式中(常記為YV12)Cb 和Cr在水平和垂直方向上有Y分辨率的一半.4:2:0有些不同,因為它並不是指在實際采樣中使用4:2:0,而是在編碼史中定義這種編碼方法是用來區別 於4:4:4和4:2:2方法的).4:2:0采樣被廣泛地應用於消費應用中,比如視頻會議,數字電視和DVD存儲中。因為每個顏色差別元素中包含了四分 之一的Y采樣元素量,那么4:2:0YCbCr視頻需要剛好4: 4:4或RGB視頻中采樣量的一半。
4:2:0采樣有時被描述是一個"每像素12位"的方法。這么說的原因可以從對四個像素的采樣中看出. 使用4:4:4采樣,一共要進行12次采樣,對每一個Y,Cb和Cr,就需要12*8=96位,平均下來要96/4=24位。使用4:2:0就需要6*8 =48位,平均每個像素48/4=12位。
在一個4:2:0隔行掃描的視頻序列中,對應於一個完整的視頻幀的Y,Cb,Cr采樣分配到兩個場中。可以得到,隔行掃描的總采樣數跟漸進式掃描中使用的采樣數目是相同的。
各種格式的具體使用位數的需求(使用4:2:0采樣,對於每個元素用8個位大小表示):
格式: Sub-QCIF 亮度分辨率: 128*96 每幀使用的位: 147456
格式: QCIF 亮度分辨率: 176*144 每幀使用的位: 304128
格式: CIF 亮度分辨率: 352*288 每幀使用的位: 1216512
格式: 4CIF 亮度分辨率: 704*576 每幀使用的位: 4866048