3,882
社区成员
发帖
与我相关
我的任务
分享
const char * decodeYUV420RGB(char * buf, int width, int height)
{
int R,G,B,Y,U,V;
int x,y;
unsigned char *rgb24;
rgb24 = (unsigned char *)malloc(sizeof(char)*width*height*3);
unsigned char* tempbuf = (unsigned char*)buf;
unsigned char *yuv420[3] = {tempbuf,tempbuf+width*height,tempbuf+width*height*5/4};
int nWidth = width>>1; //色度信号宽度
for (y=0;y<height;y++)
{
for (x=0;x<width;x++)
{
Y = *(yuv420[0] + y*width + x);
U = *(yuv420[1] + ((y>>1)*nWidth) + (x>>1));
V = *(yuv420[2] + ((y>>1)*nWidth) + (x>>1));
R = Y + 1.402*(V-128);
G = Y - 0.34414*(U-128) - 0.71414*(V-128);
B = Y + 1.772*(U-128);
//防止越界
if (R>=255)R=254;
if (R<=0)R=1;
if (G>=255)G=254;
if (G<=0)G=1;
if (B>=255)B=254;
if (B<=0)B=1;
*(rgb24 + ((y)*width + x)*3) = R;
*(rgb24 + ((y)*width + x)*3 + 1) = G;
*(rgb24 + ((y)*width + x)*3 + 2) = B;
// *(rgb24 + (y*width + x)*3) = B;
// *(rgb24 + (y*width + x)*3 + 1) = G;
// *(rgb24 + (y*width + x)*3 + 2) = R;
}
}
return (char*)rgb24;
}
BOOST_PYTHON_MODULE(yuvtorgb)
{
def("decodeYUV420", decodeYUV420RGB);
}