如何将BufferedImage转换为黑白?

时间:2013-09-21 12:09:15

标签: java image bufferedimage monochrome

如何将现有的彩色BufferedImage转换为单色?我希望图像只在两个rgb代码之间完全分开,黑色和白色。因此,如果图像周围有一个边框,背景颜色较浅或较暗,背景正在转换为白色,那么我希望边框也可以转换为白色,依此类推。

我该怎么做?

如果需要保存图像/从磁盘加载图像,我可以在必要时执行此操作。

修改:代码来测试:

package test;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashSet;
import javax.imageio.ImageIO;

public class Test
{
    public static void main(String[] args)
    {
        try
        {
            BufferedImage img = ImageIO.read(new File("http://i.stack.imgur.com/yhCnH.png") );
            BufferedImage gray = new BufferedImage(img.getWidth(), img.getHeight(),
                    BufferedImage.TYPE_BYTE_GRAY);

            Graphics2D g = gray.createGraphics();
            g.drawImage(img, 0, 0, null);

            HashSet<Integer> colors = new HashSet<>();
            int color = 0;
            for (int y = 0; y < gray.getHeight(); y++)
            {
                for (int x = 0; x < gray.getWidth(); x++)
                {
                    color = gray.getRGB(x, y);
                    System.out.println(color);
                    colors.add(color);
                }
            }

            System.out.println(colors.size() );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

使用的图片:

image

使用这个,我得到24的输出作为最后一个输出,即在这个图像中找到24种颜色,当应该有2。

1 个答案:

答案 0 :(得分:9)

解决方案是使用BufferedImage.TYPE_BYTE_BINARY作为类型而不是TYPE_BYTE_GRAY。使用BINARY会产生纯黑色和黑色。要创建的图像的白色副本,除了b&amp;之外没有任何颜色。 W上。看起来不太漂亮,但对于像OCR这样颜色需要精确的东西来说非常完美。