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)>> 8
对应的C++ 程序也比较简单:
bool rgb2gray(

本文介绍了如何使用C++将RGB图像转换为灰度图像,通过心理学公式并进行优化,包括将浮点运算转换为整数运算,使用移位操作以及降低精度来提高转换速度。示例代码展示了简化后的转换过程。
最低0.47元/天 解锁文章
960

被折叠的 条评论
为什么被折叠?



