当我使用CImg
加载.BMP
时,如何知道它是灰度还是彩色图像?
我尝试过如下,但失败了:
cimg_library::CImg<unsigned char> img("lena_gray.bmp");
const int spectrum = img.spectrum();
img.save("lenaNew.bmp");
根据我的期望,无论我加载了哪种.BMP
,频谱总是为3.因此,当我加载灰度并保存时,结果大小将是3倍大比它。
我只想在加载时保存相同的图像。如何保存为灰度?
答案 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.
}