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格式图像信息可以比rgb格式占用的字节码更少,所以可以用yuv来传输色彩数据,接收到yuv数据后再转换为rgb来显示图像,从而减少了传输图像占用的带宽。
yuv衍生出了很多格式,主要是由于其存储方式决定的。
packed存储的yuv的存储先后不同,细分为了yuv、yvu、yvyu、uyvy等等。
planar存储的yuv依据数组数量分成了yuv分别三个数组表示的完全平面的,以及y一个数组而uv一个数组的半平面(Semi planar)的两类,而半平面的又可以细分为uv和vu两个存储顺序。
I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP //安卓Camera默认格式
涉及到摄像头帧图像处理的应用经常需要操作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
绛旓細鐩存帴鎶奩UV鏍煎紡鐨勫浘鍍忔暟鎹繚瀛樹负bmp鏍煎紡鍥剧墖鑲畾鏄笉琛岀殑锛屽鏋滄兂瑕佹妸YUV鏍煎紡鍥惧儚鏄剧ず鍑烘潵鐨勮瘽鍙互鍏堟妸YUV鏁版嵁杞崲鎴愬搴旂殑RGB鏁版嵁锛岃繎浼煎彉鎹㈠叕寮忓涓嬶細R= 1.0Y + 0 +1.402(V-128)G= 1.0Y - 0.34413 (U-128)-0.71414(V-128)B= 1.0Y + 1.772 (U-128)+0 璇︾粏鍙弬鑰冿細http://www...
绛旓細I420:YUV鏍煎紡涔嬩竴銆 鍏跺畠鏍煎紡鏈: RGB565,RGB444,YUV4:2:2绛夈 鍥借冻涓庢憚鍍忓ご涓:鍥借冻,涓嶅彲淇,鏈夋椂鍊欏嵈涓嶅緱涓嶇湅;鎽勫儚澶村儚绱,鏇翠笉鍙俊,鏈夋椂鍊欏嵈鍙堜笉寰椾笉涔!鎬讳箣,鐫佸ぇ鑷繁鐨勭溂鐫,璁ょ湡鐞嗘ч夎喘鎵嶆槸鐩墠鏈濂界殑閫夋嫨銆 闂涔:鎵璋撶殑鍍忕礌鍒板簳鏄粈涔堟剰鎬? 鈥滃儚绱犫(Pixel) 鏄敱 Picture(鍥惧儚) 鍜 Element(鍏...
绛旓細2銆鍥惧儚鏍煎紡(image Format/ Color space)RGB24,I420鏄洰鍓嶆渶甯哥敤鐨勪袱绉嶅浘鍍忔牸寮忋俁GB24锛氳〃绀篟銆丟銆丅涓夌棰滆壊鍚8bit锛屾渶澶氬彲琛ㄧ幇256绾ф祿娣★紝浠庤屽彲浠ュ啀鐜256*256*256绉嶉鑹层侷420锛YUV鏍煎紡涔嬩竴銆傚叾瀹冩牸寮忔湁: RGB565锛孯GB444锛孻UV4:2:2绛夈傚浗瓒充笌鎽勫儚澶翠笂锛氬浗瓒筹紝涓嶅彲淇★紝鏈夋椂鍊欏嵈涓嶅緱涓嶇湅锛涙憚鍍忓ご...
绛旓細鍦ㄦ暟瀛楀獟浣撳鐞嗕腑锛YUV鍜孧JPEG鏄袱绉嶅父瑙佺殑鍥惧儚鏍煎紡銆俌UV锛圷'CbCr锛夋槸涓绉嶈壊褰╃┖闂达紝涓撲负瑙嗛缂栫爜璁捐锛岄氳繃鍒嗙浜害锛圷锛夊拰鑹插害锛圕b/Cr锛変俊鎭紝鏄捐憲鍦板噺灏忎簡鏁版嵁閲忋傝孧JPEG锛屽叏绉颁负Moving JPEG锛屾槸涓涓棤鎹熸牸寮忥紝姣忎竴甯у浘鍍忛兘琚嫭绔嬬紪鐮佷负JPEG娴侊紝淇濈暀浜嗗師濮嬪浘鍍忕殑瀹屾暣璐ㄩ噺銆傝鍦–++涓埄鐢‵Fmpeg搴撳疄鐜...
绛旓細Note: 涓婇潰鍚勪釜绗﹀彿閮藉甫浜嗕竴鎾囷紝琛ㄧず璇ョ鍙峰湪鍘熷鍩虹涓婅繘琛屼簡gamma correction 浜屻佹潵婧愪笂鐨勫樊寮 yuv鑹插僵妯″瀷鏉ユ簮浜巖gb妯″瀷锛岃妯″瀷鐨勭壒鐐规槸灏嗕寒搴﹀拰鑹插害鍒嗙寮锛屼粠鑰岄傚悎浜鍥惧儚澶勭悊棰嗗煙銆傚簲鐢細basic color model used in analogue color TV broadcasting.鐢ㄥ湪妯℃嫙褰╄壊鐢佃骞挎挱鐨勫熀鏈鑹叉ā鍨嬩腑 YCbCr妯″瀷...
绛旓細JPEG鏄竴绉嶅帇缂╂瘮姣旇緝澶х殑鍥剧墖鏍煎紡锛屽浘鐗囦互JPEG鏍煎紡淇濆瓨浠ュ悗锛屼細鎹熷け鎺変笉灏戝浘鐗囦俊鎭紝浣嗗叾濂藉灏辨槸鍥剧墖浣撶Н灏忥紝鏀惧湪鐢佃剳閲岋紝鍙互鍗犵敤杈冨皬鐨勭┖闂达紝鍦ㄧ綉涓婁紶鎾紝閫熷害姣旇緝蹇紝鎵浠ワ紝JPEG鍜孏IF鍙堢О涓篧EB鏍煎紡銆傚浘鐗囦互浣曠鏍煎紡澶勭悊锛屽叏鐪嬭嚜宸辩殑鐢ㄥ銆傚鏋滄槸闇瑕佹墦鍗帮紝閭d箞锛屽簲璇ョ敤TIF鏍煎紡淇濆瓨;濡傛灉鍙槸涓轰簡涓鑸殑...
绛旓細JPEG閫氬父鏈変袱绉嶉噰鏍锋柟寮忥細YUV411鍜孻UV422锛屽畠浠墍浠h〃鐨勬剰涔夋槸Y銆丆b鍜孋r涓変釜鎴愪唤鐨勬暟鎹彇鏍锋瘮渚嬨備簩銆丏CT鍙樻崲锛欴CT鍙樻崲鐨勫叏绉版槸绂绘暎浣欏鸡鍙樻崲(Discrete Cosine Transform)锛屾槸鎸囧皢涓缁勫厜寮烘暟鎹浆鎹㈡垚棰戠巼鏁版嵁锛屼互渚垮緱鐭ュ己搴﹀彉鍖栫殑鎯呭舰銆傝嫢瀵归珮棰戠殑鏁版嵁鍋氫簺淇グ锛屽啀杞洖鍘熸潵褰㈠紡鐨勬暟鎹椂锛屾樉鐒朵笌鍘熷鏁版嵁鏈変簺...
绛旓細YUV锛屽垎涓轰笁涓垎閲忥紝鈥淵鈥濊〃绀烘槑浜害锛圠uminance鎴朙uma锛夛紝涔熷氨鏄伆搴﹀硷紱鑰屸淯鈥濆拰鈥淰鈥 琛ㄧず鐨勫垯鏄壊搴︼紙Chrominance鎴朇hroma锛夛紝浣滅敤鏄弿杩褰卞儚鑹插僵鍙婇ケ鍜屽害锛岀敤浜庢寚瀹氬儚绱犵殑棰滆壊銆傚父瑙佺殑YUV鏍煎紡鏈塝UY2銆乊UYV銆乊VYU銆乁YVY銆丄YUV銆乊41P銆乊411銆乊211銆両F09銆両YUV銆乊V12銆乊VU9銆乊UV411銆乊UV420绛夛紝...
绛旓細娴峰悍鐩告満鍍忕礌鏍煎紡涓鍥惧儚鏍煎紡涓嶇粺涓鐨勫師鍥犲彲鑳芥槸鍥犱负鍍忕礌鏍煎紡鍜屽浘鍍忔牸寮忓湪姒傚康鍜屼娇鐢ㄤ笂鏈夋墍鍖哄埆銆傚儚绱犳牸寮忔槸鎸囧浘鍍忎腑姣忎釜鍍忕礌鐨勫瓨鍌ㄦ牸寮忥紝渚嬪RGB銆YUV绛夋牸寮忥紝瀹冩弿杩颁簡鍍忕礌鐨勯鑹蹭俊鎭拰缂栫爜鏂瑰紡銆傝屽浘鍍忔牸寮忔槸鎸囨暣涓浘鍍忔枃浠剁殑瀛樺偍鏍煎紡锛屼緥濡侸PEG銆丳NG绛夋牸寮忥紝瀹冩弿杩颁簡鏁翠釜鍥惧儚鏂囦欢鐨勭粍缁囩粨鏋勫拰鍘嬬缉鏂瑰紡銆傝繖绉嶄笉...
绛旓細鏄紝android camera鍒濆閲囬泦鍒扮殑鏍煎紡鏄yuv鏍煎紡鐨勶紝鍥惧儚缁樺埗鐨勬椂鍊欎細杞崲鎴恟gb鏍煎紡鐨勩