カラーの画像をグレースケールに変換してみる の変更点


 RIGHT:寄稿:東條遼平
 
 * RGB情報の平均をとる [#yd7b3b60]
 
 カラーの画像をグレースケールに変換する式はいろいろあるようですが、一番かんたんなRとGとBを単純に足して割ることにします。 Bitmapファイルを入出力してみるで RGB情報を取り出していますので、10行程追加すれば実装できます。
 
  /*---------main.c------Read_BmpとWrite_Bmpの間に追加-----------*/
    Grayscale(img);
 
  /*---------bitmap.h----追加分---------------------------------*/
  //グレースケールに変換
  void Grayscale(Image *img);
 
  /*---------bitmap.c----追加分---------------------------------*/
  void Grayscale(Image *img)
  {
    int i, j;
    unsigned int index;
    unsigned char color;
  
    for(i=0; i<img->height; i++){
      for(j=0; j<img->width; j++){
        index = i*img->width + j;
  
        color = (img->data[index].r + 
                  img->data[index].g + img->data[index].b)/3;
        img->data[index].r = 
                  img->data[index].g = img->data[index].b = color;
      }
    }
  }
 
 グレースケールはRGBの値が等しいのでRGBを平均したものを、 RGBそれぞれに代入しています。ついでに面倒なのでMakefileも作っておきます。
 
  bmp_samp: main.o bitmap.o
    gcc -o bmp_samp main.o bitmap.o
  
  main.o: main.c bitmap.h
    gcc -c main.c
  
  bitmap.o: bitmap.c bitmap.h
    gcc -c bitmap.c
  
  clean:
    rm bmp_samp *.o
 
 これをMakefileという名前でソースコードと同じディレクトリにいれておけば、
 
  $make
 
 とするだけでbmp_sampという実行可能ファイルを作ってくれます。また、
 
  $make clean
 
 とすれば中間ファイル(***.o)と実行可能ファイルを消去します。
 
 上記のたった数十行の追加だけですが、一応全ソースコードも置いておきます。
 
 - &ref(main.c);
 - &ref(bitmap.c);
 - &ref(bitmap.h);
 
 
Valid XHTML 1.1! home > コンピュータ > プログラミング >
リロード   新規 編集 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.3.29HTML convert time to 0.002 sec.