我正在使用以下代码片段创建虚拟YUV420图像。我想使用Y、U和V组件创建相同图像的RGB格式副本。
我参考了维基百科上关于YUV到RGB转换的条目,但它并不能得到与YUV相同的图像。有什么建议吗?
编辑:img是一个RGB32格式(ARGB)的QImage。
这是YUV420图像:
这是RGB转换的结果:
我参考了维基百科上关于YUV到RGB转换的条目,但它并不能得到与YUV相同的图像。有什么建议吗?
编辑:img是一个RGB32格式(ARGB)的QImage。
这是YUV420图像:
![enter image description here](https://istack.dev59.com/7GO00.webp)
![enter image description here](https://istack.dev59.com/TLNoQ.webp)
int clamp(int val){
if(val>255) return 255;
if(val<0) return 0;
return val;
}
-----
int h=height;
int w=width;
for(y=0;y<h ;y++){
for(x=0;x<w;x++){
int hy=y/2;
int hx=x/2;
//Populate YUV420 image
char compY=x+y+i*3; //Y component
char compU=128+hy+(i)*2; //U component
char compV=64+hx+(i)*5; //V component
//encoder.setInputPicturePixelData(0,y* l0+x,compY);
//encoder.setInputPicturePixelData(1,hy*l1+hx,compU); //encoder.setInputPicturePixelData(2,hy*l2+hx,compV);
//encoder.setInputPicturePixelData(2,hy*l2+hx,compV);
//Now create the RGB image
char R=clamp(compY+1.402*(compV-128));
char G=clamp(compY-0.3444*(compU-128)-0.714*(compV-128));
char B=clamp(compY+1.772*(compU-128));
int RGBval=0xFF<<24 | R<<16 | G<<8 | B;
img->setPixel(x,y,RGBval);
}
}