java - 如何在java中对图像进行阈值处理(用于黑白分色)?

标签 java image png jpeg

已解决:问题是“jpeg 压缩”。保存为“.png”有效。

我使用 java 中的精明过滤程序检测了图像的边缘。 应用过滤器后...

This is my image 如果放大... Zoomed

都有不同深浅的黑色和白色。
我希望所有边缘像素为纯白色(#FFFFFF),其余部分为黑色。

注意:除了上面的(#F7F7F7)之外,不同的像素可能有不同的阴影。上面的缩放图像只是一个示例。

编辑: 我编写此代码是为了对图像生效...

public void convert(){
    try{
        BufferedImage img = ImageIO.read(new File("input.jpg"));
        int rgb;
        int height = img.getHeight();
        int width = img.getWidth();
        File f = new File("newThreshold.jpg");
        Color white = new Color(255,255,255);
        int wh = white.getRGB();

        for (int h = 0; h<height; h++){
            for (int w = 0; w<width; w++){  

                rgb = img.getRGB(w, h);
                red = (rgb & 0x00ff0000) >> 16;
                green = (rgb & 0x0000ff00) >> 8;
                blue  =  rgb & 0x000000ff;
                if(red >= 200 || blue >= 200 || green >= 200){
                     img.setRGB(w,h,wh);
                }
            }
        }

        ImageIO.write(img,"jpg",f);
    }
    catch(Exception e){
    }
}

即使运行代码后,我的图像也没有变化。
即使红色、绿色和蓝色值高于 200,我的图像也不会改变。

更新:将图像保存为“.png”而不是“.jpg”有效!

最佳答案

您可以检查图像中的每个像素,并确定它是否高于某个阈值(如果将其值设置为纯白色)。如果需要,您也可以对较暗的区域执行相同的操作。

示例:

public Image thresholdWhite(Image in, int threshold)
{
    Pixel[][] pixels = in.getPixels();
    for(int i = 0; i < pixels.length; ++i)
    {
        for(int j = 0; j < pixels[i].length; ++j)
        {
            byte red = pixels[i][j].getRed();
            byte green = pixels[i][j].getGreen();
            byte blue = pixels[i][j].getBlue();
            /* In case it isn't a grayscale image, if it is grayscale this if can be removed (the block is still needed though) */
            if(Math.abs(red - green) >= 16 && Math.abs(red - blue) >= 16 && Math.abs(blue- green) >= 16)
            {
                if(red >= threshold || blue >= threshold || green >= threshold)
                {
                    pixels[i][j] = new Pixel(Colors.WHITE);
                }
            }
        }
    }
    return new Image(pixels);
}

关于java - 如何在java中对图像进行阈值处理(用于黑白分色)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009317/

相关文章:

java - 读取 Assets Xml 文件

java - : LinkedList<String> stringList = new LinkedList<String>();怎么了

html - 在 <p> 中定位 <img> 并删除填充?

java - 按钮上嵌入的图像不会显示

c# - 在 C# 中显示带有 alpha channel 的 PNG

java - 与通过Python执行Java程序相关

ios - 在没有 Nib 的情况下在 subview 中加载图像

android - Bitmap.compress 为绘制的图像返回 false

javascript - Three.js .png 图像呈现白色,而不是应有的样子

java - 如何让应用程序等待然后开始 Activity 或返回?