gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:21:45 27 4
gpt4 key购买 nike

已解决:问题是“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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com