CImg:如何保存灰度?

时间:2011-05-09 07:32:39

标签: c++ image image-processing cimg

当我使用CImg加载.BMP时,如何知道它是灰度还是彩色图像? 我尝试过如下,但失败了:

cimg_library::CImg<unsigned char> img("lena_gray.bmp");

const int spectrum = img.spectrum();

img.save("lenaNew.bmp");

根据我的期望,无论我加载了哪种.BMP,频谱总是为3.因此,当我加载灰度并保存时,结果大小将是3倍大比它。

我只想在加载时保存相同的图像。如何保存为灰度?

1 个答案:

答案 0 :(得分:1)

我猜BMP格式总是将图像存储为RGB编码数据,因此读取BMP将始终产生彩色图像。 如果您知道您的图像是标量,则所有通道都是相同的,因此您可以丢弃其中的两个(这里保留第一个)。

img.channel(0);

如果要检查它是否是标量图像,可以测试通道之间的相等性,如

const CImg<unsigned char> R = img.get_shared_channel(0),
                          G = img.get_shared_channel(1),
                          B = img.get_shared_channel(2);
if (R==G && R==B) {
    .. Your image is scalar !
} else {
    .. Your image is in color.
}