YUV转换成RGB算法

YUV转换成RGB

void yuvtorgb ( double *rgb,unsigned char *yuv)
{
     int i;
     rgb[0] = 1.0 * yuv[0] + 0 + 1.402 * (yuv[2] - 128);                   // r
     rgb[1] = 1.0 * yuv[0] - 0.34413 * (yuv[1] - 128) - 0.71414 * (yuv[2]-128);  // g
     rgb[2] = 1.0 * yuv[0] + 1.772 * (yuv[1]-128) + 0;                            // b
     for(i=0;i<3;i++)
     {
        if(rgb[i]>255)
            rgb[i] = 255;
        if(rgb[i]<0)
            rgb[i] = 0;
     }
}

YUV422转换成RGB

void yuv422convertrgb(unsigned char *yuv_ptr,unsigned char *rgb_ptr,int width,int height)
{
    int     i,j,k;
    int     framesize_rgb;
    double    rgb[3];
    unsigned char    yuv[3];
    unsigned char    *prgb,*pyuv;
    
    framesize_rgb = width * height * 3;
 
    prgb = rgb_ptr;
    pyuv = yuv_ptr;
    
    prgb = rgb_ptr + framesize_rgb - width * 3;
    pyuv++;
    
    for(j=0;j<height;j++)
    {
        k = 0;
        for(i=1;i<width*2;i+=2,k++)
        {
            if( k%2==0 )
            {
                yuv[0] = *pyuv--;
                yuv[1] = *pyuv++;
                yuv[2] = *(++pyuv);
                pyuv++;
            }
            else
            {
                yuv[0] = *pyuv++;
                yuv[1] = *pyuv--;
                yuv[2] = *(--pyuv);
                pyuv++;
                pyuv++;
                pyuv++;
            }
            yuvtorgb(rgb,yuv);
            *prgb++ = (unsigned char )rgb[2];
            *prgb++ = (unsigned char )rgb[1];
            *prgb++ = (unsigned char )rgb[0];
        }
        prgb -= width * 3 * 2;
    }
}

猜你喜欢

转载自www.cnblogs.com/xiaojianliu/p/9841753.html