如何将捕获的位图转换为8位图像作为灰度?

时间:2011-08-21 11:51:58

标签: image-processing bitmapimage

我正在尝试将相机拍摄的图像转换为8位图像。这应该是灰度图像。

我在论坛中搜索但能够找到转换为8位图像的方法。

任何帮助或建议对我都有帮助。

...谢谢

1 个答案:

答案 0 :(得分:0)

您提供的信息太少。首先,您的相机提供的图像格式是什么?它是一些RAW格式,jpeg还是其他什么?

以编程方式执行(例如,使用C语言):

最好的方法是使用一些图像加载库(例如SDL_image),并将图像加载到内存中,未压缩的RGB是目标格式。一旦有了未压缩的RGB图像格式,就可以执行类似

的操作
// bufPtr points to the start of the memory containing the bitmap
typedef unsigned char byte;
struct rgb { byte red, green blue; } * colorPtr = bufPtr; 
for (int i = 0; i < bufSize; i++, bufPtr++) { 
   byte gray = (unsigned char) (((float) bufPtr->red * 0.3f + 
                                 (float) bufPtr->green * 0.59f + 
                                 (float) bufPtr->blue * 0.11f)) / 3.0f * 255.0f + 0.5f);
    bufPtr->red = bufPtr->green = bufPtr->blue = gray;
    }

如果您不想编码,可以例如使用GIMP,加载图像并从颜色菜单中应用去饱和度。您可以为GIMP安装ufraw插件,以便在其中加载RAW格式的图像。如果要将整个颜色信息存储为8位(而不是每个颜色通道使用8位),GIMP中还有另一个选项可以降低颜色深度。