2

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

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

const int spectrum = img.spectrum();

img.save("lenaNew.bmp");

出乎我的意料,无论.BMP我加载什么样的,光谱总是3。结果,当我加载一个灰度并保存时,结果大小将是原来的3倍。

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

4

1 回答 1

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.
}
于 2011-06-09T08:02:35.523 回答