• YUV到RGB的转换


    以下内容来源于网络,下面三个链接里的内容是比较好的,感谢博主的分享。

    http://blog.csdn.net/housisong/article/details/1859084

    http://blog.csdn.net/tommy_wxie/article/details/37909643

    http://www.cnblogs.com/qinjunni/archive/2012/04/06/2434393.html   这里有介绍YUV转RGB的优化 位运算和查表法

    YUV到RGB的转换公式:网上收集到的各种公式

      RGB颜色空间到YUV颜色空间的转换公式:

        Y= 0.256788*R + 0.504129*G + 0.097906*B +  16;
        U=-0.148223*R - 0.290993*G + 0.439216*B + 128;
        V= 0.439216*R - 0.367788*G - 0.071427*B + 128;

    (以下装换关系来自网络,本质都是一样的)

       YUV颜色空间到RGB颜色空间的转换公式:  (给的示例中用的是这个

        B= 1.164383 * (Y - 16) + 2.017232*(U - 128);
        G= 1.164383 * (Y - 16) - 0.391762*(U - 128) - 0.812968*(V - 128);
        R= 1.164383 * (Y - 16) + 1.596027*(V - 128);

    另一种转换关系:

    1. // 转换公式(浮点方式) 

    2. R = Y + 1.4075*(V-128) 

    3. G = Y - 0.3455*(U-128) - 0.7169*(V-128) 

    4. B = Y + 1.779*(U-128) 

    ( 补充: 在视频格式中基本上都用的上面的转换公式;但在其他一些地方可能会使用下面的转换公式(不同的使用场合可能有不同的转换系数):

        Y =  0.299*R + 0.587*G + 0.114*B;
        U = -0.147*R - 0.289*G + 0.436*B;
        V =  0.615*R - 0.515*G - 0.100*B;

        R = Y + 1.14*V;
        G = Y - 0.39*U - 0.58*V;
        B = Y + 2.03*U;
      )

    RGB to YUV Conversion

    Y  =   (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
    
    Cr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
    
    Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

    YUV to RGB Conversion

    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)

    无论是YUV444、YUV422、还是YUV420格式,根据对应的方法提取完YUV并转换为RGB数据后,其文件大小应该是: 图像的高 * 图像的宽 * 3 。由于不同的YUV码流转换为RGB数据的提取方式均不相同

    我们知道YUYV视频格式的内存数据布局图示:

        图中可以看出Y的数据量是U或者V的两倍,这是因为人的眼睛一般对亮度比对颜色更敏感一些,所以将连续的两个像素的U(或V)值只保存一个U(或V)值,那么每个
    像素平均占用16bit储存空间。

    项目中使用到的YUV转RGB格式代码:

    static void YUV2RGB(unsigned char Y, unsigned char U, unsigned char V,
                         unsigned char *R, unsigned char *G, unsigned char *B)
    {
        *R = Y + (V - 128) + ((V - 128) * 103 >> 8);
        *G = Y - ((U - 128) * 88 >> 8) - ((V - 128) * 183 >> 8);
        *B = Y + (U - 128) + ((U - 128) * 198 >> 8);
        if (*R > 255)
            *R = 255;
        if (*G > 255)
            *G = 255;
        if (*B > 255)
            *B= 255;
        if (*R < 0)
            *R = 0;
        if (*G < 0)
            *G = 0;
        if (*B < 0)
            *B = 0;
    }
    
    void image_data_handle(unsigned char *dist, unsigned int size)
    {//fb_buffer,将数据写入这个内存就相当于在屏幕输出,
        //这里就是framebuffer和v4l2的连接处
        unsigned long *to = (unsigned long *)fb_buffer;
        unsigned long *from = (unsigned long *)dist; //这个内存就是存储数据的,可以在这里对数据操作
    
        unsigned char Y0;
        unsigned char U0;
        unsigned char Y1;
        unsigned char V0;
    
        unsigned char R0;
        unsigned char G0;
        unsigned char B0;
        unsigned char R1;
        unsigned char G1;
        unsigned char B1;
        //  为何要除以4????
        size >>= 2;
        while(size--)
        {    //取出YUYV的值 这里是4:2:2的每个像素16位
            Y0 = (*from & 0x000000FF) >> 0;
            //U0 = 128;							//white and black
            U0=(*from & 0x0000FF00)>>8;	//colorful
            Y1 = (*from & 0x00FF0000) >> 16;
            //V0 = 128;							//white and blcak
            V0=(*from & 0xFF000000)>>24;	//colorful
            YUV2RGB(Y0, U0, V0, &R0, &G0, &B0);
            YUV2RGB(Y1, U0, V0, &R1, &G1, &B1);
            //rgb565  16位
            *to = (R0 & 0x1F) << 11 | (G0 & 0x3F) << 5 | (B0 & 0x1F) << 0;
            *to |= ((R1 & 0x1F) << 11 | (G1 & 0x3F) << 5 | (B1 & 0x1F) << 0) << 16;
    
            from++;
            to++;
        }
    }
    

      

  • 相关阅读:
    单例模式
    简单的WPS二次开发脚本
    使用DevExpress改变WinForm皮肤(VS)
    步入DevExpress的使用(VS)
    设置PdfPTable与标题间的距离
    tar: Removing leading `/’ from member names
    MySQL关闭过程详解和安全关闭MySQL的方法
    Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
    解决Centos关闭You have new mail in /var/spool/mail/root提示
    hping3命令
  • 原文地址:https://www.cnblogs.com/silence-hust/p/4465641.html
Copyright © 2020-2023  润新知