gpt4 book ai didi

c++ - DevIL 库 : save gray scale image in three matrices instead one

转载 作者:行者123 更新时间:2023-11-28 06:49:43 27 4
gpt4 key购买 nike

我需要制作一个程序,将 RGB 图像转换为灰度图像并将其保存为 PGM 格式。我使用 DevIL 库,但是当我保存图像时,我总是获得灰度的 3D 图像(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;

最佳答案

不幸的是,由于 PNM 导出中的错误,DevIL 只能写入 PPM(可移植像素图,3 channel RGB)文件,而不考虑文件扩展名。唯一的解决办法是使用不同的文件格式,支持单 channel 灰度图像,如 PNG

Matlab 应该也能使用它。如果您确实需要或想要 PGM 格式的文件,则必须使用 png2pnm 之类的转换器。

关于c++ - DevIL 库 : save gray scale image in three matrices instead one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24215219/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com