当我使用CImg
加载.BMP
时,如何知道它是灰度图像还是彩色图像?
我试过如下,但失败了:
cimg_library::CImg<unsigned char> img("lena_gray.bmp");
const int spectrum = img.spectrum();
img.save("lenaNew.bmp");
按照我的预期,无论我加载了什么样的.BMP
,spectrum 总是3。因此,当我加载灰度并保存它时,结果大小将比它大 3 倍。
我只想保存与加载时相同的图像。如何保存为灰度图?
最佳答案
我猜 BMP 格式总是将图像存储为 RGB 编码数据,因此读取 BMP 总是会产生彩色图像。 如果您知道图像是标量的,则所有 channel 都相同,因此您可以丢弃其中两个(此处保留第一个)。
img.channel(0);
如果你想检查它是一个标量图像,你可以测试 channel 之间的相等性,如
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.
}
关于c++ - CImg:如何保存灰度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5933893/