0
RGB 이미지를 GRAYSCALE 이미지로 변환하고 PGM 형식으로 저장하는 프로그램을 만들어야합니다. 나는 Devil 라이브러리를 사용하지만, 이미지를 저장할 때 항상 그레이 스케일에서 3D 이미지 (3 행렬)를 얻지 만, MATLAB에서로드하면 3 행렬이 아니라 1 행렬이됩니다. Devil을 사용하여 출력 파일에서 하나의 행렬을 얻으려면 어떻게해야합니까? PNM
수출의 버그로 인해DevIL 라이브러리 : 하나 대신 3 개의 행렬로 회색조 이미지 저장
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;
} 불행하게도