使用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)
还没有任何评论哟~
