0

カラー画像を白黒画像に変換する作業を行っています。これには TYPE_BYTE_BINARY のタイプの BufferedImage を使用しています。しかし、出力画像は正しく変換されません。たとえば、画像に黒い背景に青い文字が含まれている場合、この部分の結果画像は完全に黒になります。誰でも私を助けることができますか?私のコードは以下です。

//Invert the colormodel
byte[] map = new byte[] { (byte) (255), (byte) (0) };
IndexColorModel colorModel = new IndexColorModel(1, 2, map,
map, map);

BufferedImage bufferedImage = new BufferedImage(
img.getWidth(null), img.getHeight(null),
BufferedImage.TYPE_BYTE_BINARY, colorModel);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(img, 0, 0, null);
g2.dispose();
4

2 に答える 2

2

青の強度は非常に低いため、青 (RGB(0, 0, 255) など) を 50% のしきい値で白黒に変換すると黒になることが予想されます。白黒に変換する前に元の画像を明るくして、画像の白くなる部分を増やしてみてください。

RescaleOpを使用して、変換前に画像を明るくするか、画像とともにインスタンスをas パラメータdrawImageを取るメソッドに渡すことができます。BufferedImageOpR、G、B の値を個別にスケーリングできることに注意してください。

于 2013-09-12T19:56:05.487 に答える
1
BufferedImage bufferedImage= new BufferedImage(img.getWidth(null), img.getHeight(null); 
    ColorConvertOp op = 
        new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
    op.filter(bufferedImage, bufferedImage);

このリンクを確認してください

于 2013-09-12T07:44:09.463 に答える