詳解YUV資料格式

2021-10-20 08:19:15 字數 3700 閱讀 9851

yuv422,yuv420相互轉換

yv12和i420的區別

平坦格式大彙總

yuv分為三個分量

有兩種格式,packed和planer

打包就是y0u0v0 y1u1v1 y2u2v2 y3u3v3

平鋪就是y0y1y2y3 u0u1u2u3 v0v1v2v3

平鋪的方式調節亮度和顏色比較方便。打包的方式可以很方便的裁剪。

有的文件理解方式是以陣列的方式進行理解。

我的建議是以記憶體中連續的排布進行理解。

yuv碼流的儲存格式其實與其取樣的方式密切相關,主流的取樣方式有三種

關於其詳細原理,可以通過網上其它文章了解,這裡我想強調的是如何根據其取樣格式來從碼流中還原每個畫素點的yuv值,因為只有正確地還原了每個畫素點的yuv值,才能通過yuv與rgb的轉換公式提取出每個畫素點的rgb值,然後顯示出來。

用三個圖來直觀地表示採集的方式吧,以黑點表示取樣該畫素點的y分量,以空心圓圈表示採用該畫素點的uv分量。

先記住下面這段話,以後提取每個畫素的yuv分量會用到。

下面我用圖的形式給出常見的yuv碼流的儲存方式,並在儲存方式後面附有取樣每個畫素點的yuv資料的方法

其中,cb、cr的含義等同於u、v

yuyv為yuv422取樣的儲存格式中的一種,相鄰的兩個y共用其相鄰的兩個cb、cr,分析,對於畫素點y』00、y』01 而言,其cb、cr的值均為 cb00、cr00,其他的畫素點的yuv取值依次類推。

uyvy格式也是yuv422取樣的儲存格式中的一種,只不過與yuyv不同的是uv的排列順序不一樣而已,還原其每個畫素點的yuv值的方法與上面一樣。

yuv422p也屬於yuv422的一種,它是一種plane模式,即平面模式,並不是將yuv資料交錯儲存而是先存放所有的y分量,然後儲存所有的u(cb)分量,最後儲存所有的v(cr)分量,如上圖所示。

其每乙個畫素點的yuv值提取方法也是遵循yuv422格式的最基本提取方法,即兩個y共用乙個uv。比如,對於畫素點y』00、y』01 而言,其cb、cr的值均為 cb00、cr00

yu12和yv12屬於yuv420格式,也是一種plane模式,將y、u、v分量分別打包,依次儲存。其每乙個畫素點的yuv資料提取遵循yuv420格式的提取方式,即4個y分量共用一組uv。注意,上圖中,y』00、y』01、y』10、y』11共用cr00、cb00,其他依次類推。

例如:yuv420 plane資料, 以720×488大小圖象yuv420 plane為例,其儲存格式是:

共大小為(720×480×3>>1)位元組,分為三個部分:

y,u和v三個部分內部均是行優先儲存,

三個部分之間是y,u,v順序儲存。

即yuv資料的(0~720×480)位元組是y分量值(720×480720×480×5/4)位元組是u分量,(720×480×5/4~720×480×3/2)位元組是v分量

具體如下所示。

nv12和nv21屬於yuv420格式,是一種two-plane模式,即y和uv分為兩個plane,但是uv(cbcr)為交錯儲存,而不是分為三個plane。其提取方式與上一種

類似,即y』00、y』01、y』10、y』11共用cr00、cb00

在yuv420中,乙個畫素點對應乙個y,乙個4x4的小方塊對應乙個u和v。對於所有yuv420影象,它們的y值排列是完全相同的,因為只有y的影象就是灰度影象。

yuv420sp與yuv420p的資料格式它們的uv排列在原理上是完全不同的。

yuv420p它是先把u存放完後,再存放v,也就是說uv它們是連續的。而yuv420sp它是uv、uv這樣交替存放的。(見下圖) 有了上面的理論,我就可以準確的計算出乙個yuv420在記憶體中存放的大小。 width * hight =y(總和) u = y / 4 v = y / 4

所以yuv420 資料在記憶體中的長度是 width * hight * 3 / 2,假設乙個解析度為8x4的yuv影象,它們的格式如下圖:

上面的由演算法可以看出,uv是交替存放的,不是連續存放的。上面的轉換成圖的效果就是,把左圖沿著左上和右下對角線旋轉180度,得到的就是右圖的效果。

在採集到rgb24資料後,需要對這個格式的資料進行第一次壓縮。即將影象的顏色空間由rgb2yuv。

因為,x264在進行編碼的時候需要標準的yuv(4:2:0)。

但是這裡需要注意的是,雖然yv12也是(4:2:0),但是yv12和i420的卻是不同的,在儲存空間上面有些區別。如下:

繼續我們的話題,經過第一次資料壓縮後rgb24->yuv(i420)。這樣,資料量將減少一半,為什麼呢?

呵呵,這個就太基礎了,我就不多寫了。 同樣,如果是rgb24->yuv(yv12),也是減少一半。

但是,雖然都是一半,如果是yv12的話效果就有很大損失。然後,經過x264編碼後,資料量將大大減少。將編碼後的資料打包,通過rtp實時傳送。到達目的地後,將資料取出,進行解碼。完成解碼後,資料仍然是yuv格式的,所以,還需要一次轉換,這樣windows的驅動才可以處理,就是yuv2rgb24。

yuy2 是 4:2:2 [y0 u0 y1 v0]

yuv420p 和 yuv420的區別 在儲存格式上有區別

yuv420p:yyyyyyyy uuuuuuuu vvvvv yuv420: yuv yuv yuv

yuv420p,y,u,v三個分量都是平面格式,分為i420和yv12。

i420格式和yv12格式的不同處在u平面和v平面的位置不同。

在i420格式中,u平面緊跟在y平面之後,然後才是v平面(即:yuv);但yv12則是相反(即:yvu)。

詳解YUV資料格式

yuv,是一種顏色編碼方法。常使用在各個影像處理元件中。yuv在對 或影片編碼時,考慮到人類的感知能力,允許降低色度的頻寬。yuv是編譯true color顏色空間 color space 的種類,y uv,yuv,ycbcr,ypbpr等專有名詞都可以稱為yuv,彼此有重疊。y 表示明亮度 lum...

詳解YUV420資料格式

1.yuv簡介 yuv定義 分為三個分量,y 表示明亮度 luminance或luma 也就是灰度值 而 u 和 v 表示的則是色度 chrominance或chroma 作用是描述影像色彩及飽和度,用於指定畫素的顏色。yuv格式 有兩大類 planar和packed。對於planar的yuv格式,...

詳解YUV420資料格式

1.yuv簡介 yuv定義 分為三個分量,y 表示明亮度 luminance或luma 也就是灰度值 而 u 和 v 表示的則是色度 chrominance或chroma 作用是描述影像色彩及飽和度,用於指定畫素的顏色。yuv格式 有兩大類 planar和packed。對於planar的yuv格式,...