Java 如何将BuffereImage转换为黑白?

Java 如何将BuffereImage转换为黑白?,java,image,bufferedimage,monochrome,Java,Image,Bufferedimage,Monochrome,如何将现有的彩色BuffereImage转换为单色?我想要的图像是完全分裂之间只有两个rgb代码,黑色和白色。因此,如果图像周围有一个边框,它是背景的较浅或较深阴影,并且背景正在转换为白色,那么我希望边框也转换为白色,依此类推 我该怎么做 如果需要保存映像/从磁盘加载映像,我可以在必要时这样做 编辑:测试此操作的代码: package test; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import ja

如何将现有的彩色BuffereImage转换为单色?我想要的图像是完全分裂之间只有两个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();
        }
    }
}
封装测试;
导入java.awt.Graphics2D;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.util.HashSet;
导入javax.imageio.imageio;
公开课考试
{
公共静态void main(字符串[]args)
{
尝试
{
BuffereImage img=ImageIO.read(新文件(“http://i.stack.imgur.com/yhCnH.png") );
BuffereImage gray=新的BuffereImage(img.getWidth(),img.getHeight(),
BuffereImage.TYPE_BYTE_GRAY);
Graphics2D g=gray.createGraphics();
g、 drawImage(img,0,0,null);
HashSet colors=新的HashSet();
int color=0;
对于(int y=0;y
使用的图像:


使用这个,我得到24的输出作为最后一个输出,也就是说,在这个图像中有24种颜色,而应该有2种。

解决方案是使用
缓冲图像。TYPE_BYTE_BINARY
作为类型,而不是
TYPE_BYTE_GRAY
。使用二进制文件可以创建图像的纯黑白副本,除了黑白之外没有其他颜色。看起来不漂亮,但是对于像OCR这样需要精确颜色的东西来说是完美的

像吗?@AndrewThompson是的,像那张照片中的灰度图!它会将所有颜色完全转换为灰色和白色吗?@AndrewThompson嗯,我已经尝试过了,但是图像中的其他颜色仍然存在,它不是完全的灰色/白色。还有其他建议吗?@AndrewThompson谢谢,还有done@AndrewThompson好吧,当它允许我的时候,我会接受我的:)你应该考虑使用一个高级的二值化方法,比如,如果你的扫描质量很差。