RGB图转化成灰度图的色彩权重(不同精度等级)

RGB图转灰度图经典的心理学公式:

Gray = R*0.299 + G*0.587 + B*0.114

一般地,在程序中浮点型的运算较整型慢,特考虑用整型移位的方式进行色彩转化。

不同的整型值大小对应不同的转化精度,2位至20位的精度转化公式如下:

                          Gray = (R*1 + G*2 + B*1) >> 2
                          Gray = (R*2 + G*5 + B*1) >> 3
                          Gray = (R*4 + G*10 + B*2) >> 4
                          Gray = (R*9 + G*19 + B*4) >> 5
                          Gray = (R*19 + G*37 + B*8) >> 6
                          Gray = (R*38 + G*75 + B*15) >> 7
                          Gray = (R*76 + G*150 + B*30) >> 8
                          Gray = (R*153 + G*300 + B*59) >> 9
                          Gray = (R*306 + G*601 + B*117) >> 10
                          Gray = (R*612 + G*1202 + B*234) >> 11
                          Gray = (R*1224 + G*2405 + B*467) >> 12
                          Gray = (R*2449 + G*4809 + B*934) >> 13
                          Gray = (R*4898 + G*9618 + B*1868) >> 14
                          Gray = (R*9797 + G*19235 + B*3736) >> 15
                          Gray = (R*19595 + G*38469 + B*7472) >> 16
                          Gray = (R*39190 + G*76939 + B*14943) >> 17
                          Gray = (R*78381 + G*153878 + B*29885) >> 18
                          Gray = (R*156762 + G*307757 + B*59769) >> 19
                          Gray = (R*313524 + G*615514 + B*119538) >> 20

一般地,10位的精度较为常用(精度太高,效率会降低)。

例如,RGB32转灰度代码如下:

------------------------------------------

void RGB32ToGray ( unsigned char *pIn, unsigned char *pOut, const int height, const int width, const int flag )
{
    int green, red, blue;
    for ( int i = 0; i < height; i++ )
    {
        for ( int j = 0; j < width; j++ )
        {
            blue = pIn[i*width * 4 + j * 4]; //注意排列顺序B G R
            green = pIn[i*width * 4 + j * 4 + 1];
            red = pIn[i*width * 4 + j * 4 + 2];
            pOut[i*width + j] = (unsigned char)((blue * 117 + green * 601 + red * 306) >> 10);
        }
    }

}

-------------------------------------------

特别地,主要RGB32中色彩分量的排列顺序,以上的RGB32排列为 [ B G R NULL ] 。

猜你喜欢

转载自blog.csdn.net/qq_33810188/article/details/81587829