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

寄稿:東條遼平

RGB情報の平均をとる

カラーの画像をグレースケールに変換する式はいろいろあるようですが,一番かんたんな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)と実行可能ファイルを消去します.

上記のたった数十行の追加だけですが,一応全ソースコードも置いておきます.

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.2.17HTML convert time to 0.152 sec.