c++ - CImg:如何保存灰度?

标签 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,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/

相关文章:

c++ - QPainter 未激活

android - 使用 getDrawingCache 提高图像质量 - android

image - 如何使用imagemagick向图像添加带有一些填充的内边框?

algorithm - 将RGB图像读入二进制并在Matlab中显示为RGB

c++ - 如何估计相机从场景中拍摄优质图像的曝光时间

opencv - 使用浅色 Blob 进行 Blob 检测

c++ - C++中的事件管理

c++ - 为什么需要 C++ 头文件的包含保护?

c++ - 使用 FFMPEG 库到 UDP 流 mpeg2 ts 视频延迟/初始连接问题

java - JSP 中图像不显示