CImg:如何保存灰度

CImg: How to save a grayscale?

本文关键字:保存 灰度 何保存 CImg      更新时间:2023-10-16

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

cimg_library::CImg<unsigned char> img("lena_gray.bmp");
const int spectrum = img.spectrum();
img.save("lenaNew.bmp");

出乎我意料,无论我加载了哪种.BMP,频谱都将始终为3。因此,当我加载灰度并保存它时,结果大小将比实际大 3 倍。

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

我想 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.
}