![undefined](https://cbu01.alicdn.com/img/ibank/O1CN0164lLAe1R6RhPRNNr4_!!3191592062-0-cib.jpg?__r__=1732084261409)
![undefined](https://cbu01.alicdn.com/img/ibank/O1CN014zJU5D1R6RhQ9dlLL_!!3191592062-0-cib.jpg?__r__=1732084261409)
![undefined](https://cbu01.alicdn.com/img/ibank/O1CN01yIySTF1R6RhPzapqV_!!3191592062-0-cib.jpg?__r__=1732084261409)
![undefined](https://cbu01.alicdn.com/img/ibank/O1CN013bLjZy1R6RhSjPt7I_!!3191592062-0-cib.jpg?__r__=1732084261409)
![undefined](https://cbu01.alicdn.com/img/ibank/O1CN01fiCwIg1R6RhPzZpTX_!!3191592062-0-cib.jpg?__r__=1732084261409)
![undefined](https://cbu01.alicdn.com/img/ibank/O1CN01AjwF4O1R6RhNMjOhW_!!3191592062-0-cib.jpg?__r__=1732084261409)
0.引言
本篇文案重點講解YUV格式和內(nèi)存擺列,看完本篇文案,能夠快速對YUV格式有個更清楚的認識。
![](https://p3-sign.toutiaoimg.com/pgc-image/4bf6082a6fd44f3a974bc84db8820005~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=8yZZ%2BSEyb9oISKYAjDElMm%2Fuz%2Fo%3D)
從下圖就能夠看出,YUV4:1:1,YUV4:2:0,就壓縮的最厲害。一般在網(wǎng)絡傳輸時,通常在送到編碼之前,都轉(zhuǎn)換作為這2種格式。
![](https://p3-sign.toutiaoimg.com/pgc-image/71193e140db443858e801c867a6b40d6~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=TSbboLm9U5TI4xEYi8vZet%2BZft0%3D)
![](https://p3-sign.toutiaoimg.com/pgc-image/e1bb15f5f6f4463498018b491a02d21f~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=Io9zpdWcrFEbkrBQLyvTK4spY48%3D)
1.YUV簡述
yuv是歐洲電視系統(tǒng)采用的顏色編碼辦法之一,包括一個亮度信號Y和兩個色差信號U、V。yuv格式能夠優(yōu)化彩色視頻信號數(shù)據(jù)的存儲方式。與RGB格式相比,最大的優(yōu)良在于只需占用極少的數(shù)據(jù)存儲空間,使得數(shù)據(jù)傳輸更為簡易。
yuv中,“Y”暗示明亮度,亦便是灰階值;而“U”和“V”暗示的則是色度,色度的功效是記錄圖像色彩及飽和度。“亮度”是透過輸入信號來創(chuàng)立的,辦法是將信號的特定部分疊加到一塊。“色度”則定義了顏色的兩個方面─色調(diào)與飽和度,分別用Cr和Cb來暗示。其中,Cr反映了RGB輸入信號紅色部分與RGB信號亮度值之間的差異。而Cb反映的是RGB輸入信號藍色部分與RGB信號亮度值之間的差異。
采用yuv色彩空間的重要性是它的亮度信號y和色度信號u、v是分離的。倘若僅有y信號分量而無u、v分量,那樣這般暗示的圖像便是黑白灰度圖像。彩色電視采用yuv空間正是為了用亮度信號y處理彩色電視機與黑白電視機的兼容問題,使黑白電視機亦能接收彩色電視信號。
![](https://p3-sign.toutiaoimg.com/pgc-image/8685aac223764ce5adc6bca397a299f4~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=1EsHL5Aqfji3T%2BgCOXxqfoOu0rc%3D)
2.YUV采樣格式
重點的采樣格式有YCbCr:4:4:4、YCbCr:4:2:2、YCbCr:4:2:0、以及YCbCr:4:2:1,舉例說明中YCbCr:4:1:1為常用的采樣格式,其含義為:每一個點保留一個8bit的亮度值(亦便是Y值),每4個點保留一個Cr和Cb值,Cr和Cb像素點在肉眼中的感覺不會起太大的變化。因此,原來用RGB(R,G,B都是8bit unsigned)模型,即1個點需要24bits。如果按YCbCr:4:1:1采樣后,平均每一個點僅需要8+8/4+8/4=12bits。這般就把圖像的數(shù)據(jù)壓縮了一半。下面對這幾種格式做仔細介紹。
![](https://p3-sign.toutiaoimg.com/pgc-image/bbd8666ad3ed4359aa6c37ab297cba9b~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=M1P39ieiYQGZ5lwKdwxXGaIQKEs%3D)
(1)YUV 4:4:4
YUV三個采樣數(shù)據(jù)完整存儲,不存在任何數(shù)據(jù)損失與壓縮,當然數(shù)據(jù)存儲體積不變,與格式相同。如下圖:
每一個交叉暗示一個Y值數(shù)據(jù),每一個圓圈暗示一個U值與V值數(shù)據(jù),圖中為每一個Y值對應一個U值與V值,整體為一個像素點,該像素點數(shù)據(jù)保留完整。
![](https://p3-sign.toutiaoimg.com/pgc-image/d552f5123e30413093d0fd654a5eb141~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=p73tglap%2BQHMBCNwjv4g44hXh88%3D)
YUV 4:4:4圖像
交錯格式存儲如下:
YUV數(shù)據(jù)在內(nèi)存中的存儲方式,每3個為一組,為方便32位計算機的按位直接讀取,一般在每組YUV值后會填充一個A值,使得每次讀取數(shù)值為32位,增多讀取速度。
![](https://p26-sign.toutiaoimg.com/pgc-image/ec8e04c9db844f778e2eae65ac5ff3ea~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=3UxBYKOnip1KqsYE6q%2BUWM1Dm2k%3D)
YUV 4:4:4內(nèi)存存儲方式
(2)YUV 4:2:2
灰度值數(shù)據(jù)Y完整讀取,色度U與V僅保存本來的一半,取每行像素點的奇數(shù)位的UV值進行保留。此處UV數(shù)據(jù)壓縮百分之五十,Y數(shù)據(jù)不變,壓縮比為1-(4+2+2)/(4+4+4)*100%=33.33%)。因像素點在屏幕表示后,圖像顏色的失真針對觀察者來講并不會影響圖像的質(zhì)量與觀賞度,因此能夠按此法進行壓縮。如下圖所示:
![](https://p3-sign.toutiaoimg.com/pgc-image/068e94086d034775be3ff4520e27b3b4~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=x%2FTKh85%2FnL%2FkoZGH2CTRFlGRNCg%3D)
YUV 4:2:2圖像
交錯格式存儲如下:
![](https://p3-sign.toutiaoimg.com/pgc-image/e0211a85ceca43859055219a5bd91f89~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=7nl5%2BWsO4YPWiHErZM0RUob0jMQ%3D)
YUV 4:2:2 內(nèi)存存儲方式
每一個交叉暗示一個Y值數(shù)據(jù),每一個圓圈暗示一個U值與V值數(shù)據(jù),圖中為每兩個Y值對應一個U值與V值,整體為兩個像素點,兩像素點共用一個相同的色度差,利用物體顏色在兩個像素的距離內(nèi)不會變化過大的原理,恰當壓縮圖像數(shù)據(jù)。
為YUV數(shù)據(jù)在內(nèi)存中的存儲方式,每4個為一組,其中奇數(shù)位為Y值,偶數(shù)位為U值與V值,32位計算機在讀取時能夠一次恰好讀取一組YUV數(shù)據(jù),其中包含兩個Y值與其共用的一個U值與V值。
(3)YUV 4:1:1
灰度值數(shù)據(jù)Y依舊完整讀取,而色度U與V僅保存本來的四分之一,取每兩行像素點的左上位置的UV值進行保留。此處數(shù)據(jù)壓縮百分之七十五,Y數(shù)據(jù)不變,壓縮比為1-(4+1+1)/(4+4+4)*100%=50%)。一樣利用因像素點在屏幕表示后,圖像顏色的失真針對觀察者來講并不會影響圖像的質(zhì)量與觀賞度,既然YUV4:2:2能夠橫向壓縮,因此YUV 4:1:1能夠增多縱向壓縮,達到更加高的壓縮比例,但需要付出數(shù)據(jù)較難處理的代價。如下圖所示:
![](https://p3-sign.toutiaoimg.com/pgc-image/d77029121f9c4a0ca93d0964ca48a3cd~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=z4sKqIvs4N4NR15KauUSpZgvw2E%3D)
每一個交叉暗示一個Y值數(shù)據(jù),每一個圓圈暗示一個U值與V值數(shù)據(jù),圖中為每四個Y值對應一個U值與V值,整體為四個像素點,四個像素點共用一個相同的色度差,一樣利用物體顏色在兩個像素的距離內(nèi)不會變化過大的原理,恰當壓縮圖像數(shù)據(jù)。內(nèi)存擺列如下圖所示:
![](https://p3-sign.toutiaoimg.com/pgc-image/1811d940d33645c6848fc284dc84c732~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1737304774&x-signature=%2B201VPwETtj4pgkSRxWWqPCo95U%3D)
內(nèi)存存儲方式Y(jié)UV 4:1:1內(nèi)存存儲方式
上圖中,為YUV 4:1:1數(shù)據(jù)在內(nèi)存中的存儲方式,與YUV 4:4:4、YUV 4:2:2區(qū)別的是,雖然YUV 4:1:1壓縮比最大,需要存儲的數(shù)據(jù)最少,然則其存儲方式是最為繁雜的,需要運用三個Buffer依次存取Y,U,V,三值,此存儲方式節(jié)約了存儲內(nèi)存空間與數(shù)據(jù)進行傳送時的網(wǎng)絡傳輸帶寬,增多了編程人員對數(shù)據(jù)還原表示處理的難度。
確定圖像的存儲方式關(guān)系到數(shù)據(jù)在內(nèi)存中的存儲方式,當進行圖像合并時,需要對內(nèi)存中的數(shù)據(jù)進行修改,以達到合并圖像的效果,因此認識圖像存儲方式至關(guān)重要。
重視:盡管上面列舉出了有些常用的格式,然則還是有非常多格式亦是有用到的,實質(zhì)遇到采集與編碼格式區(qū)別,或解碼與播放格式區(qū)別,就需要進行格式轉(zhuǎn)換。理解清楚這些格式轉(zhuǎn)換就曉得怎么去轉(zhuǎn)換了,當然倘若搞不清這種數(shù)據(jù)關(guān)系,亦有庫能夠用。
3.其它
如WebRTC庫中源碼針對圖像類的命名為I420,初步猜測為YUV4:2:0格式。但在interface文件I420videoframe.h中觀察創(chuàng)建圖像的辦法與其參數(shù):
int CreateFrame(int size_y,const uint8_t & buffer_y,int size_U,const uint8_t & buffer_U, int size_V,const uint8_t & buffer_V,int width,intheigth,int stride_y,int stride_u,int stride_v)推斷其實質(zhì)存儲方式為YUV4:1:1,由于參數(shù)中包括三個Buffer,分別為bufferY,bufferU以及bufferV,以及她們對應的體積。
事實上,WebRTC做為視頻通話的研發(fā)庫,其思慮最優(yōu)先的必然是最大化壓縮數(shù)據(jù),減少需要網(wǎng)絡傳輸?shù)臄?shù)據(jù),減少視頻通話與現(xiàn)實中的延遲,在使得視頻通話順暢的基本上,再進行畫質(zhì)的改善。因此呢WebRTC選取YUV4:1:1為恰當選取,但此圖像格式處理的方式較為困難,后面文案再介紹下怎么轉(zhuǎn)換的算法。
4.總結(jié)
本文用一篇非常簡短的文案,再次講述了YUV格式和內(nèi)存擺列,后面有機會再繼續(xù)講講一些轉(zhuǎn)換算法和RGB格式。歡迎關(guān)注,保藏,轉(zhuǎn)發(fā),分享。
后期關(guān)于項目知識,亦會更新在微X公眾號“記錄世界 from antonio”,歡迎關(guān)注