import java.io.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.imageio.*;
public class Java2DTest15
{
   public static void main(String args[])
       throws Exception
   {
       /* 画像を2値化する */
       BufferedImage img = ImageIO.read(new File("sf.jpg"));
       /* まずグレースケールに変換 */
       WritableRaster wr = img.getRaster();
       int buf[] = new int[wr.getNumDataElements()];
       for(int ly=0;ly<wr.getHeight();ly++){
           for(int lx=0;lx<wr.getWidth();lx++){
               wr.getPixel(lx, ly, buf);
               int maxval = Math.max(Math.max(buf[0], buf[1]), buf[2]);
               int minval = Math.min(Math.min(buf[0], buf[1]), buf[2]);
               buf[0] = buf[1] = buf[2] = (maxval+minval)/2;
               wr.setPixel(lx, ly, buf);
           }
       }
       /* lookupデータ作成 */
       byte dat[] = new byte[256];
       for(int di=0;di<256;di++){
           dat[di] = di>256*0.55?(byte)255:(byte)0;
       }
       LookupOp lo = new LookupOp(new ByteLookupTable(0, dat), null);
       BufferedImage img2 = lo.filter(img, null);
       ImageIO.write(img2, "jpg", new File("sample531a.jpg"));
   }
}
元画像(sf.jpg)
出力画像(sample531a.jpg)

環境
JDK6 Upadate6(JDK1.6.0_06)
 
No comments:
Post a Comment