0

RGB 画像を GRAYSCALE 画像に変換して PGM 形式で保存するプログラムを作成する必要があります。DevIL ライブラリを使用していますが、画像を保存すると、常に 3D 画像 (3 つの行列) がグレースケールで取得されますが、MATLAB に読み込むと、1 つではなく 3 つの行列が作成されます。DevIL を使用して、出力ファイルでマトリックスを 1 つだけ取得するにはどうすればよいですか?

 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;

}

4

1 に答える 1