RGB转灰度,通常会使用下面的一个心理学公式:(Matlab和OpenCV中使用的也是该公式)
Gray = 0.2989*R + 0.5870*G + 0.1140*B
抛却指令优化不谈,优化转化速度的最直接方法就是将浮点运算转化为整数运算:
比如我们可以将上式转化为:
Gray = (2989*R + 5870*G + 1140*B)/ 10000,
但是上面的除法还是不够快,我们完全可以使用移位操作来代替:
Gray = (4898*R + 9618*G + 1868*B)>> 14
此外,对大部分计算机视觉应用来说,图像的精度问题不是一个特别敏感的问题,因此我们可以通过降低精度来进一步减少计算量:(我通常使用8位精度)
Gray = (76*R + 150*G + 30*B