CImg: Как сохранить шкалу серого? - PullRequest
2 голосов
/ 09 мая 2011

Когда я использую CImg для загрузки .BMP, как я могу узнать, является ли это серым или цветным изображением?Я попробовал следующее, но не получилось:

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

const int spectrum = img.spectrum();

img.save("lenaNew.bmp");

К моему ожиданию, независимо от того, какой .BMP я загрузил, спектр всегда будет равен 3. В результате, когда я загружаюмасштабируйте и сохраняйте его, размер результата будет в 3 раза больше, чем есть.

Я просто хочу сохранить то же изображение, которое загружено.Как сохранить в оттенках серого?

1 Ответ

1 голос
/ 09 июня 2011

Я предполагаю, что формат 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.
}
...