Одноканальные изображения в CImg

Я использую CImg для обработки изображений. В настоящее время я работаю только с изображениями в оттенках серого JPG, BMP, TIFF. проблема, с которой я сталкиваюсь с функцией CImg, заключается в следующем:

CImg сохраняет значения Pixel следующим образом. R1R2R3R4............G1G2G3G4........B1B2B3B4.........

Даже для изображений в оттенках серого 3 разных канала создаются отдельно. Это очень усложняет мою работу. Просто для копирования значений с одного изображения на другое мне нужно скопировать все компоненты пикселей. Мне нужно перебрать все каналы, которые замедляют мой алгоритм.

Поскольку я работаю только с изображениями в оттенках серого, для меня не имеет значения, одноканальное это или многоканальное. Есть ли способ преобразовать трехканальное изображение в одноканальное в CImg. Пожалуйста, дайте мне знать как можно скорее.

Спасибо всем заранее


person sravan    schedule 18.01.2010    source источник


Ответы (2)



Если вас интересуют только одноканальные изображения, вы также можете сохранить их как одноканальные PGM изображения, которые CImg может читать и записывать напрямую, без дополнительных библиотек:

#include "CImg.h"
using namespace cimg_library;
int main() {
   // Load colour image
   CImg<unsigned char> image("image.png");

   // Extract Red channel, which is same as Green and Blue in greyscale
   image.channel(0);

   // ALTERNATIVE TO PREVIOUS LINE IS TO USE LUMINANCE
   // image.RGBtoYCbCr().channel(0);

   // Save as single channel PGM file
   image.save_pnm("result.pgm");
}

Позже вы можете преобразовать файл PGM (описание PGM в Википедии) в файл JPEG или PNG, или TIFF с помощью ImageMagick:

convert result.pgm image.jpg
convert result.pgm image.png

Ключевые слова: обработка изображений, обработка изображений, C++, библиотека, CImg, NetPBM, PBMplus, PBM, PGM, PPM, PAM, оттенки серого, оттенки серого, один канал

person Mark Setchell    schedule 20.08.2017