Библиотека DevIL: сохранить серое изображение в трех матрицах вместо одной

Мне нужно сделать программу, которая конвертирует изображение RGB в изображение GRAYSCALE и сохраняет его в формате PGM. Я использую библиотеку DevIL, но когда я сохраняю изображение, я всегда получаю трехмерное изображение (3 матрицы) в оттенках серого, но, если я загружаю его в MATLAB, у меня есть 3 матрицы вместо одной. Как я могу получить только одну матрицу в моем выходном файле, используя DevIL?

 int main()
{

ilInit();
ilEnable(IL_ORIGIN_SET);
ilOriginFunc(IL_ORIGIN_UPPER_LEFT);
ilEnable(IL_FILE_OVERWRITE);

ILuint ImageName; // The image name to return.
ilGenImages(1, &ImageName);
ilBindImage(ImageName);
if(!ilLoadImage("/home/andrea/Scrivania/tests/siftDemoV4/et000.jpg"))
{   printf("err");
exit;
}
else
printf("caricata\n");

ILuint width,height;
width = ilGetInteger(IL_IMAGE_WIDTH);
height = ilGetInteger(IL_IMAGE_HEIGHT);
double v[3]={0.2989360212937755001405548682669177651405334472656250000,0.5870430744511212495240215503145009279251098632812500000,0.1140209042551033058465748126764083281159400939941406250};
printf("%.55f %.55f %.55f",v[0],v[1],v[2]);
ILubyte *imgValue=ilGetData();
int i=0;
ILubyte imgNuova[width*height];while( i < width*height)
{imgNuova[i]=(char)round( ( (double)imgValue[3*i]*v[0])+ ( (double)imgValue[3*i+1]*v[1])+((double)imgValue[3*i+2]*v[2]));

i++;

}ILuint ImageName2;

ilGenImages(2, &ImageName2);
ilBindImage(ImageName2);
ilTexImage(width, height, 1, 1, IL_LUMINANCE,
IL_UNSIGNED_BYTE, imgNuova);
iluFlipImage();
ilSave(IL_PNM,"/home/andrea/Scrivania/tests/siftDemoV4/et000new.pgm");

return 0;

}

0

Решение

К сожалению, из-за ошибки в PNM экспорт, DevIL может и будет только писать PPM (Portable Pixmaps, 3-канальный RGB) файлы независимо от расширения файла. Единственное решение — использовать другой формат файла, который поддерживает одноканальные изображения в градациях серого, например PNG,

Matlab должен быть в состоянии использовать это так же хорошо. Если вам абсолютно необходимы или нужны файлы в PGM формат, вам придется использовать конвертер, как png2pnm,

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector