转换为YUV/YCbCr色彩空间-多版本YUV的颜色转换有很多种,但它们都有不同的结果!哪一个是官方正确的?这是我的测试程序的输出。我输入R=128G=50B=50(最大255)。表格显示了转换后的YUV值和重新转换后的RGB值(与原始值不匹配)。./ColourConversion.exe1285050YUVRGB名称=================================================================================0001285050a)原始RGB值791161621285049b)MicrosoftMSDN整数数学781161621264947c)ITU-RBT.601731201621274949d)HDTVITU-RBT.709731142021762548e)RGBtofull-rangeYCbCr781161621264947f)Book'VideoDemystified'这是我的代码(在C#中):usingSystem;namespaceColourConversion{classMainClass{//打开调试以在“红色、绿色和蓝色”中输入RGB值publicstaticbooldebug=true;公共静态int红色=128;公共静态int绿色=50;公共静态int蓝色=50;//forprintTidy()publicstaticstringalphabet="abcdefghijklmnopqrstuvwxyz";公共静态inttestCount=0;publicstaticvoidMain(string[]args){//初始化变量intr,g,b,R,G,B,Y,U,V,C,D,E;r=g=b=R=G=B=Y=U=V=C=D=E=0;//如果不处于调试模式,则读取用户输入if(!debug){如果(args.Length>8)+16;U=((-38*R-74*G+112*B+128)>>8)+128;V=((112*R-94*G-18*B+128)>>8)+128;C=Y-16;D=U-128;E=V-128;R=剪辑((298*C+409*E+128)>>8);G=剪辑((298*C-100*D-208*E+128)>>8);B=剪辑((298*C+516*D+128)>>8);printTidy(Y,U,V,R,G,B,"MicrosoftMSDN整数数学");//----------------------------------------------------------//ITU-RBT.601//http://www.equasys.de/colorconversion.htmlR=r;G=克;B=b;//http://sofzh.miximages.com/c%23/index.phpY=clip(16+(0.257*R+0.504*G+0.098*B));U=剪辑(128+(-0.148*R+-0.291*G+0.439*B));V=剪辑(128+(0.439*R+-0.368*G+-0.071*B));//http://sofzh.miximages.com/c%23/index.phpR=clip(1.164*(Y-16)+0.0*(U-128)+1.596*(V-128));G=剪辑(1.164*(Y-16)+-0.392*(U-128)+-0.813*(V-128));B=剪辑(1.164*(Y-16)+2.017*(U-128)+0.0*(V-128));printTidy(Y,U,V,R,G,B,"ITU-RBT.601");//----------------------------------------------------------//HTDVITU-RBT.709//http://www.equasys.de/colorconversion.htmlR=r;G=克;B=b;//http://sofzh.miximages.com/c%23/index.phpY=clip(16+((0.183*R)+(0.614*G)+(0.062*B)));U=剪辑(128+((-0.101*R)+(-0.339*G)+(0.439*B)));V=剪辑(128+((0.439*R)+(-0.399*G)+(-0.040*B)));//http://sofzh.miximages.com/c%23/index.phpR=clip((1.164*(Y-16))+(0.0*(U-128))+(1.793*(V-128))));G=剪辑((1.164*(Y-16))+(-0.213*(U-128))+(-0.533*(V-128)));B=剪辑((1.164*(Y-16))+(2.112*(U-128))+(0.0*(V-128)));printTidy(Y,U,V,R,G,B,"HDTVITU-RBT.709");//----------------------------------------------------------//RGB转全范围YCbCr//http://www.equasys.de/colorconversion.htmlR=r;G=克;B=b;//http://sofzh.miximages.com/c%23/index.phpY=剪辑(0.0+((0.299*R)+(0.587*G)+(0.114*B)));U=剪辑(128.0+((-0.169*R)+(-0.331*G)+(0.500*B)));V=剪辑(128.0+((0.500*R)+(0.419*G)+(-0.081*R)));//http://sofzh.miximages.com/c%23/index.phpR=clip((1.0*Y)+(0.0*(U-128))+(1.4*(V-128)));G=剪辑((1.0*Y)+(-0.343*(U-128))+(-0.711*(V-128)));B=剪辑((1.0*Y)+(1.765*(U-128))+(0.0*(V-128)));printTidy(Y,U,V,R,G,B,"RGB到全范围YCbCr");//----------------------------------------------------------//书籍“视频解密”ISBN1-878707-09-4//http://www.fourcc.org/fccyvrgb.phpR=r;G=克;B=b;Y=剪辑((0.257*R)+(0.504*G)+(0.098*B)+16);V=夹子((0.439*R)-(0.368*G)-(0.071*B)+128);U=夹子(-(0.148*R)-(0.291*G)+(0.439*B)+128);B=剪辑(1.164*(Y-16)+2.018*(U-128));G=剪辑(1.164*(Y-16)-0.813*(V-128)-0.391*(U-128));R=剪辑(1.164*(Y-16)+1.596*(V-128));优先级ntTidy(Y,U,V,R,G,B,"图书'视频解密'");}//以漂亮的形式打印输出publicstaticvoidprintTidy(intY,intU,intV,intR,intG,intB,stringmethodName){Console.Write(Y.ToString().PadLeft(10));Console.Write(U.ToString().PadLeft(10));Console.Write(V.ToString().PadLeft(10));Console.Write(R.ToString().PadLeft(10));Console.Write(G.ToString().PadLeft(10));Console.Write(B.ToString().PadLeft(10));Console.WriteLine(""+alphabet[testCount++]+")"+methodName);返回;}//clip()的重载-将double转换为intpublicstaticintclip(doubled){returnclip((int)d);}//将int剪辑到0到255之间publicstaticintclip(inti){if(i255)return255;返回我;}}}不是“正式正确”,例如,BT。601用于.DVvideo和其他用于其他标准...YUV/YCbCr颜色的来源是什么?那会告诉你如何转换它以上就是C#学习教程:ConvertingtoYUV/YCbCrcolorspace–多版本分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
