1.YUV基礎
yuv是一種類似rgb的顏色模型姑食,起源于黑白和彩電的過渡時期窍奋。其中Y代表亮度领突,uv組合起來可以表示色度暖璧。yuv信息只有y的信息就足以顯示黑白的圖片,yuv和YCbCr表示相同的東西君旦,且Cb嚴格對應U澎办,Cr嚴格對應V,yuv和rgb可以通過固定公式進行轉換金砍。
yuv轉rgb:
rgb轉yuv:
yuv主流的采樣方式有yuv4:4:4局蚀、yuv4:2:2、yuv4:2:0捞魁。下圖中以黑點表示采樣該像素點的Y分量至会,以空心圓圈表示采用該像素點的UV分量,可以看到這些采樣方式是影響uv的采樣的谱俭,對y都是全部采樣奉件。
- YUV 4:4:4采樣,每一個Y對應一組UV分量昆著,圖像和rgb占用的字小大小一致县貌,均為pixelsize*3。
- YUV 4:2:2采樣凑懂,每兩個Y共用一組UV分量煤痕,占用的大小為pixelsize+pixelsize/2+pixelsize/2。
- YUV 4:2:0采樣接谨,每四個Y共用一組UV分量摆碉,占用大小為pixelsize+pixelsize/4+pixelsize/4。
可以看到脓豪,yuv格式圖像信息可以比rgb格式占用的字節(jié)碼更少巷帝,所以可以用yuv來傳輸色彩數(shù)據(jù),接收到y(tǒng)uv數(shù)據(jù)后再轉換為rgb來顯示圖像扫夜,從而減少了傳輸圖像占用的帶寬楞泼。
2.常見的YUV格式
yuv衍生出了很多格式,主要是由于其存儲方式?jīng)Q定的笤闯。
yuv按照存儲方式可以分成兩個大類:
- packed:打包格式是將yuv分量混合存在同一個數(shù)組中
- planar:平面格式是將yuv三個分量存成三個數(shù)組或者兩個數(shù)組分別存儲
packed存儲的yuv的存儲先后不同堕阔,細分為了yuv、yvu颗味、yvyu超陆、uyvy等等。
planar存儲的yuv依據(jù)數(shù)組數(shù)量分成了yuv分別三個數(shù)組表示的完全平面的脱衙,以及y一個數(shù)組而uv一個數(shù)組的半平面(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圖像
涉及到攝像頭幀圖像處理的應用經(jīng)常需要操作Yuv數(shù)據(jù)幀,例如鏡像退唠、加濾鏡等鹃锈。
操作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
[安卓libyuvDemo