图像和流媒体 -- 详解YUV数据格式
如需轉載請注明出處:https://blog.csdn.net/qq_29350001/article/details/78283369
我們在講 FFmpeg 系列的時候,有提到 YUV 的。其中包括YUV播放器、簡單的YUV格式介紹。
參看:FFmpeg再學習 -- 視音頻基礎知識
接下來詳細研究一下:
參看:YUV -- 維基百科
參看:圖文詳解YUV420數據格式
一、YUV簡介
YUV,是一種顏色編碼方法。常使用在各個影像處理元件中。 YUV在對照片或影片編碼時,考慮到人類的感知能力,允許降低色度的帶寬。
YUV是編譯true-color顏色空間(color space)的種類,Y'UV, YUV, YCbCr,YPbPr等專有名詞都可以稱為YUV,彼此有重疊。“Y”表示明亮度(Luminance、Luma),“U”和“V”則是色度、濃度(Chrominance、Chroma),Y′UV, YUV, YCbCr, YPbPr所指涉的范圍,常有混淆或重疊的情況。從歷史的演變來說,其中YUV和Y'UV通常用來編碼電視的模擬信號,而YCbCr則是用來描述數位的影像信號,適合影片與圖片壓縮以及傳輸,例如MPEG、JPEG。 但在現今,YUV通常已經在電腦系統上廣泛使用。
Y'代表明亮度(luma; brightness)而U與V儲存色度(色訊; chrominance; color)部分; 亮度(luminance)記作Y,而Y'的prime符號記作伽瑪校正。
YUV Formats分成兩個格式:
緊縮格式(packed formats):將Y、U、V值儲存成Macro Pixels陣列,和RGB的存放方式類似。
平面格式(planar formats):將Y、U、V的三個分量分別存放在不同的矩陣中。
緊縮格式(packed format)中的YUV是混合在一起的,對于YUV4:4:4格式而言,用緊縮格式很合適的,因此就有了UYVY、YUYV等。
平面格式(planar formats)是指每Y分量,U分量和V分量都是以獨立的平面組織的,也就是說所有的U分量必須在Y分量后面,而V分量在所有的U分量后面,此一格式適用于采樣(subsample)。平面格式(planar format)有I420(4:2:0)、YV12、IYUV等。
二、歷史
Y'UV的發明是由于彩色電視與黑白電視的過渡時期[1]。黑白視訊只有Y(Luma,Luminance)視訊,也就是灰階值。到了彩色電視規格的制定,是以YUV/YIQ的格式來處理彩色電視圖像,把UV視作表示彩度的C(Chrominance或Chroma),如果忽略C信號,那么剩下的Y(Luma)信號就跟之前的黑白電視信號相同,這樣一來便解決彩色電視機與黑白電視機的相容問題。Y'UV最大的優點在于只需占用極少的帶寬。
因為UV分別代表不同顏色信號,所以直接使用R與B信號表示色度的UV。 也就是說UV信號告訴了電視要偏移某象素的的顏色,而不改變其亮度。 或者UV信號告訴了顯示器使得某個顏色亮度依某個基準偏移。 UV的值越高,代表該像素會有更飽和的顏色。
彩色圖像記錄的格式,常見的有RGB、YUV、CMYK等。彩色電視最早的構想是使用RGB三原色來同時傳輸。這種設計方式是原來黑白帶寬的3倍,在當時并不是很好的設計。RGB訴求于人眼對色彩的感應,YUV則著重于視覺對于亮度的敏感程度,Y代表的是亮度,UV代表的是彩度(因此黑白電影可省略UV,相近于RGB),分別用Cr和Cb來表示,因此YUV的記錄通常以Y:UV的格式呈現。
三、常用的YUV格式
為節省帶寬起見,大多數YUV格式平均使用的每像素位數都少于24位元。主要的抽樣(subsample)格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和YCbCr 4: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的水平取樣,垂直完全采樣。
最常用Y:UV記錄的比重通常1:1或2:1,DVD-Video是以YUV 4:2:0的方式記錄,也就是我們俗稱的I420,YUV4:2:0并不是說只有U(即Cb), V(即Cr)一定為0,而是指U:V互相援引,時見時隱,也就是說對于每一個行,只有一個U或者V分量,如果一行是4:2:0的話,下一行就是4:0:2,再下一行是4:2:0...以此類推。至于其他常見的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等。
?
用三個圖來直觀地表示采集的方式吧,以黑點表示采樣該像素點的Y分量,以空心圓圈表示采用該像素點的UV分量。
先記住下面這段話,以后提取每個像素的YUV分量會用到。
YUV 4:4:4采樣,每一個Y對應一組UV分量。
YUV 4:2:2采樣,每兩個Y共用一組UV分量。?
YUV 4:2:0采樣,每四個Y共用一組UV分量。?
四、存儲方式
下面我用圖的形式給出常見的YUV碼流的存儲方式,并在存儲方式后面附有取樣每個像素點的YUV數據的方法,其中,Cb、Cr的含義等同于U、V。
(1) YUVY 格式 (屬于YUV422)
YUYV為YUV422采樣的存儲格式中的一種,相鄰的兩個Y共用其相鄰的兩個Cb、Cr,分析,對于像素點Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00,其他的像素點的YUV取值依次類推。?
(2) UYVY 格式 (屬于YUV422)
UYVY格式也是YUV422采樣的存儲格式中的一種,只不過與YUYV不同的是UV的排列順序不一樣而已,還原其每個像素點的YUV值的方法與上面一樣。
(3) YUV422P(屬于YUV422)
YUV422P也屬于YUV422的一種,它是一種Plane模式,即平面模式,并不是將YUV數據交錯存儲,而是先存放所有的Y分量,然后存儲所有的U(Cb)分量,最后存儲所有的V(Cr)分量,如上圖所示。其每一個像素點的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個Y共用一個UV。比如,對于像素點Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00。
(4)YV12,YU12格式(屬于YUV420)
YU12和YV12屬于YUV420格式,也是一種Plane模式,將Y、U、V分量分別打包,依次存儲。其每一個像素點的YUV數據提取遵循YUV420格式的提取方式,即4個Y分量共用一組UV。注意,上圖中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次類推。
(5)NV12、NV21(屬于YUV420)
NV12和NV21屬于YUV420格式,是一種two-plane模式,即Y和UV分為兩個Plane,但是UV(CbCr)為交錯存儲,而不是分為三個plane。其提取方式與上一種類似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00
(6)了解更多
想了解更多類型的存儲方式,參看:YUV Formats
中文的有人翻譯了,參看:V4L2文檔翻譯(十)
?
- 2.6.1. Packed?YUV?formats
- 2.6.2. V4L2_PIX_FMT_GREY (‘GREY’)
- 2.6.3. V4L2_PIX_FMT_Y10 (‘Y10 ‘)
- 2.6.4. V4L2_PIX_FMT_Y12 (‘Y12 ‘)
- 2.6.5. V4L2_PIX_FMT_Y10BPACK (‘Y10B’)
- 2.6.6. V4L2_PIX_FMT_Y16 (‘Y16 ‘)
- 2.6.7. V4L2_PIX_FMT_Y16_BE (‘Y16 ‘ | (1 << 31))
- 2.6.8. V4L2_PIX_FMT_Y8I (‘Y8I ‘)
- 2.6.9. V4L2_PIX_FMT_Y12I (‘Y12I’)
- 2.6.10. V4L2_PIX_FMT_UV8 (‘UV8’)
- 2.6.11. V4L2_PIX_FMT_YUYV (‘YUYV’)
- 2.6.12. V4L2_PIX_FMT_UYVY (‘UYVY’)
- 2.6.13. V4L2_PIX_FMT_YVYU (‘YVYU’)
- 2.6.14. V4L2_PIX_FMT_VYUY (‘VYUY’)
- 2.6.15. V4L2_PIX_FMT_Y41P (‘Y41P’)
- 2.6.16. V4L2_PIX_FMT_YVU420 (‘YV12’), V4L2_PIX_FMT_YUV420 (‘YU12’)
- 2.6.17. V4L2_PIX_FMT_YUV420M (‘YM12’), V4L2_PIX_FMT_YVU420M (‘YM21’)
- 2.6.18. V4L2_PIX_FMT_YUV422M (‘YM16’), V4L2_PIX_FMT_YVU422M (‘YM61’)
- 2.6.19. V4L2_PIX_FMT_YUV444M (‘YM24’), V4L2_PIX_FMT_YVU444M (‘YM42’)
- 2.6.20. V4L2_PIX_FMT_YVU410 (‘YVU9’), V4L2_PIX_FMT_YUV410 (‘YUV9’)
- 2.6.21. V4L2_PIX_FMT_YUV422P (‘422P’)
- 2.6.22. V4L2_PIX_FMT_YUV411P (‘411P’)
- 2.6.23. V4L2_PIX_FMT_NV12 (‘NV12’), V4L2_PIX_FMT_NV21 (‘NV21’)
- 2.6.24. V4L2_PIX_FMT_NV12M (‘NM12’), V4L2_PIX_FMT_NV21M (‘NM21’), V4L2_PIX_FMT_NV12MT_16X16
- 2.6.25. V4L2_PIX_FMT_NV12MT (‘TM12’)
- 2.6.26. V4L2_PIX_FMT_NV16 (‘NV16’), V4L2_PIX_FMT_NV61 (‘NV61’)
- 2.6.27. V4L2_PIX_FMT_NV16M (‘NM16’), V4L2_PIX_FMT_NV61M (‘NM61’)
- 2.6.28. V4L2_PIX_FMT_NV24 (‘NV24’), V4L2_PIX_FMT_NV42 (‘NV42’)
- 2.6.29. V4L2_PIX_FMT_M420 (‘M420’)
五、YUV與RGB的轉換公式
參看:YUV -- 維基百科
這部分我沒看懂... ??
六、推薦一個工具
參看:Image Analyzer
參看:GSG:Debugging projects
參看:軟件操作演示
文章最后,是有視頻都哦!!可以下載下來看看。
?
- Bayer?File:Bayer.zip
- bayer720480_8of16_prop.txt: size 720 x 480 pixels, even B lines, GR/BG order, 8 bits out of 16 bits
- bayer720480_10of16_prop.txt: size 720 x 480 pixels, even B lines, GR/BG order, 10 bits out of 16 bits
- DaVinci HD?File:DaVinciHD.zip
- NV12 Tiled?File:Nv12 tiled.zip
- YUV 4:2:0 planar?File:Yuv420planar.zip
- YUV 4:2:2 packed?File:Yuv422packed.zip
- YUV 4:2:2 planar?File:Yuv422planar.zip
?
七、RGB 介紹
既然都提到RGB了,就簡單講一下吧。
參看:三原色光模式 -- 維基百科
三原色光模式(RGB color model),又稱RGB顏色模型或紅綠藍顏色模型,是一種加色模型,將紅(Red)、綠(Green)、藍(Blue)三原色的色光以不同的比例相加,以產生多種多樣的色光。(且三原色的紅綠藍不可能用其他單色光合成)
三原色光的相加:紅光加綠光為黃光,黃光加藍光為白光
再有一個是 ?RGB顏色查詢對照表??
?
八、像素
最后,我要講一下像素,上面提到很多次了。
參看:分辨率和像素是什么關系? -- 知乎
像素即px,是畫面中最小的點(單位色塊)。像素的大小是沒有固定長度值的,不同設備上1個單位像素色塊的大小是不一樣的。
分辨率=畫面水平方向的像素值 * 畫面垂直方向的像素值。分辨率可以分為兩方面:屏幕分辨率和圖像分辨率。
1. 屏幕分辨率: ? ??
例如,屏幕分辨率是1024×768,也就是說設備屏幕的水平方向上有1024個像素點,垂直方向上有768個像素點。像素的大小是沒有固定長度的,不同設備上一個單位像素色塊的大小是不一樣的。 ? ?例如,尺寸面積大小相同的兩塊屏幕,分辨率大小可以是不一樣的,分辨率高的屏幕上面像素點(色塊)就多,所以屏幕內可以展示的畫面就更細致,單個色塊面積更小。而分辨率低的屏幕上像素點(色塊)更少,單個像素面積更大,可以顯示的畫面就沒那么細致。
2. 圖像分辨率: ? ?
例如,一張圖片分辨率是500x200,也就是說這張圖片在屏幕上按1:1放大時,水平方向有500個像素點(色塊),垂直方向有200個像素點(色塊)。 ? ?在同一臺設備上,圖片分辨率越高,這張圖片1:1放大時,圖片面積越大;圖片分辨率越低,這張圖片1:1縮放時,圖片面積越小。(可以理解為圖片的像素點和屏幕的像素點是一個一個對應的)。 ? ?但是,在屏幕上把圖片超過100%放大時,為什么圖片上像素色塊也變的越大,其實是設備通過算法對圖像進行了像素補足,我們把圖片放的很大后看到的一塊一塊的方格子,雖然理解為一個圖像像素,但是其實是已經補充了很多個屏幕像素;同理,把圖片小于100%縮小時,也是通過算法將圖片像素進行減少。 ? ??
最后,雖然不同設備上像素塊大小會不一樣,但是同一臺硬件設備上的屏幕分辨率、像素塊大小是不會變的。PC電腦上之所以可以調整屏幕分辨率,其實也是通過算法轉換了。
?
舉個例子吧,我用的華為P8手機(是該換了...),看看其參數。
這里就有攝像頭參數介紹了,后置攝像頭 1300萬像素。或者說?vivo X9前置2000萬柔光雙攝,這個廣告熟不熟悉。
1300萬像素啥意思呢?
打開手機相機設置,查看分辨率,你可以看到有如下幾個選項。
其中圖片大小最大的 13M 4160x3120(4:3) 即攝像頭最大像素
4160x3120 = 12979200 = 1300 萬像素
如需轉載請注明出處:https://blog.csdn.net/qq_29350001/article/details/78283369
?
總結
以上是生活随笔為你收集整理的图像和流媒体 -- 详解YUV数据格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么选择springcloud微服务架
- 下一篇: S5PV210开发 -- 前言