YUV格式圖像基礎

ref:https://www.jianshu.com/p/4f31bcc6da79

1.YUV基礎

yuv是一種類似rgb的顏色模型,起源於黑白和彩電的過渡時期。其中Y代表亮度,uv組合起來可以表示色度。yuv信息只有y的信息就足以顯示黑白的圖片,yuv和YCbCr表示相同的東西,且Cb嚴格對應U,Cr嚴格對應V,yuv和rgb可以通過固定公式進行轉換。

yuv轉rgb:

yuv轉rgb

rgb轉yuv:

rgb轉yuv

yuv主流的採樣方式有yuv4:4:4、yuv4:2:2、yuv4:2:0。下圖中以黑點表示採樣該像素點的Y分量,以空心圓圈表示採用該像素點的UV分量,可以看到這些採樣方式是影響uv的採樣的,對y都是全部採樣。

YUV採樣方式

  1. YUV 4:4:4採樣,每一個Y對應一組UV分量,圖像和rgb佔用的字小大小一致,均爲pixelsize*3。
  2. YUV 4:2:2採樣,每兩個Y共用一組UV分量,佔用的大小爲pixelsize+pixelsize/2+pixelsize/2。
  3. YUV 4:2:0採樣,每四個Y共用一組UV分量,佔用大小爲pixelsize+pixelsize/4+pixelsize/4。

可以看到,yuv格式圖像信息可以比rgb格式佔用的字節碼更少,所以可以用yuv來傳輸色彩數據,接收到yuv數據後再轉換爲rgb來顯示圖像,從而減少了傳輸圖像佔用的帶寬。

2.常見的YUV格式

yuv衍生出了很多格式,主要是由於其存儲方式決定的。

yuv按照存儲方式可以分成兩個大類:

  • packed:打包格式是將yuv分量混合存在同一個數組中
  • planar:平面格式是將yuv三個分量存成三個數組或者兩個數組分別存儲

packed存儲的yuv的存儲先後不同,細分爲了yuv、yvu、yvyu、uyvy等等。

planar存儲的yuv依據數組數量分成了yuv分別三個數組表示的完全平面的,以及y一個數組而uv一個數組的半平面(Semi planar)的兩類,而半平面的又可以細分爲uv和vu兩個存儲順序。

常見的yuv格式列表如下:

I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP //安卓Camera默認格式

3.操作yuv圖像

涉及到攝像頭幀圖像處理的應用經常需要操作Yuv數據幀,例如鏡像、加濾鏡等。

操作yuv圖像可以直接使用google開源的libyuv庫,提供了對yuv圖像的格式轉換、縮放、裁剪、旋轉、鏡像等操作:谷歌git libyuv,github上有人用其做了簡單的安卓版本的demo:安卓libyuvDemo,包含了基礎的yuv庫的使用邏輯,但是該項目沒有同步谷歌libyuv更新。

參考鏈接:

https://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html

http://www.360doc.com/content/16/0517/16/496343_559909505.shtml

谷歌git libyuv

[安卓libyuvDemo



作者:太白新星
鏈接:https://www.jianshu.com/p/4f31bcc6da79
來源:簡書

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章