• ベストアンサー

白黒の二値画像

今、java言語で、JPEG形式の画像を白黒の二値画像に変換させるプログラムを考えているのですが、ピクセルの色の取得法がよく分からず、変換できません。 どのようにしたら、白黒の二値画像になるのか、簡単なプログラムを教えてもらえませんか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.3

要するに、あるイメージを白黒2階調に変換したイメージを作りたい、ということと考えればいいんでしょうか? 方法はいろいろ考えられますが、まぁフィルターを使うのが一番手っ取り早いでしょう。 イメージをBufferedImageとして用意し、ByteLookupTableを作成、それをもとにLookupOpを作ってフィルター処理します。 あらかじめ、0~255の各輝度の階調ごとに変換する値を指定したbyte配列を用意しておきます。これを使って、BufferedImageの輝度をフィルター処理します。 // import java.awt.Image.*; BufferedImage img1; BufferedImage img2; ing w = 500; // イメージのwidth int h = 300; // イメージのheight img = Toolkit.getDafaultToolkit.getImage("hoge.jpg"); try { img1 = new BufferedImage(w,h,BUfferedImage.TYPE_INT_ARGB); img2 = new BufferedImage(w,h,BUfferedImage.TYPE_INT_RGB); Graphics2D g = img1.createGraphics(); g.drawImage(img,0,0,this); // とりあえずthisで g.dispose(); byte[] arr = new byte[256]; // これが変換用のテーブル for(int i = 0;i < 256;i++) arr[i] = (byte)(i < 128 ? 0 : 255); // テーブル準備 ByteLookupTable lt = new ByteLookupTable(0,arr); LookupOp lo = new LookupOp(lt,null); lo.filter(img1,img2); // フィルター処理 } catch ・・・以下略・・・ 例えば、こんな感じで2階調のイメージにフィルター処理されたimg2ができあがります。階調の感じは、byte配列の値をいろいろと調整すればいいでしょう。 BufferedImage,ByteLookupTable,LookupOpについて調べてみるとよいでしょう。

その他の回答 (2)

  • nicewind
  • ベストアンサー率0% (0/1)
回答No.2

 今晩は。  あまり詳しくはないですが、 java.awt.image.SampleModel、 java.awt.image.Raster、 java.awt.image.WritableRaster、 java.awt.image.BufferedImage 等を使うのではないでしょうか。java.awt.image.SampleModel の解説に、色について少し書いてあります。

  • guccii
  • ベストアンサー率31% (14/44)
回答No.1

「Java2 グラフィックプログラミング入門」 中山茂 技報堂出版 ISBN4-7655-3320-4 が値段もお手ごろですし、サンプルも多く、比較的よくまとまっていたと思います。これあたりから手をつけてみてはいかかでしょうか?

関連するQ&A