Advertisement

使用C++将RGB图像转换为灰度图

阅读量:

将RGB图像转换为灰度图像时,通常会采用如下心理学计算公式(Matlab与OpenCV中同样应用此公式):

Gray = 0.2989R + 0.5870G + 0.1140*B

若不考虑指令优化问题,提升转换效率的最直接途径便是将浮点数运算替换为整数运算:

例如,可以将上述表达式重新表示为:

Gray = (2989R + 5870G + 1140*B) / 10000,

不过,上述表达式中的除法运算仍存在一定的性能瓶颈。为了进一步提高运算速度,我们可以采用移位操作来替代除法运算:

Gray = (4898R + 9618G + 1868*B) >> 14

对于大多数计算机视觉应用场景而言,图像的精度要求并非特别苛刻。因此,在实际应用中可以通过适当降低精度来进一步减少计算量(我通常选择使用8位精度):

Gray = (76R + 150G + 30*B) >> 8

相应的C++实现代码也较为简洁:

复制代码
    bool rgb2gray(unsigned char *src,unsigned char *dest,int width,int height)
    {
    int r, g, b;
    for (int i=0;i<width*height;++i)
    {
        r = *src++; // load

全部评论 (0)

还没有任何评论哟~