【问题标题】:How to threshold and BufferedImage in Java如何在 Java 中设置阈值和 BufferedImage
【发布时间】:2015-09-02 16:31:42
【问题描述】:

我已在 Java 中将原始图像读取为 BufferedImage,然后进行一些操作,我试图将图像阈值设置为高(255)或低(0),但是当我保存图像时,实际上我尝试覆盖它有了新值,像素值不仅是0和255,还会出现一些相邻的值,我不明白为什么。

阅读我的图片

File input = new File("/../Screenshots/1.jpg");
BufferedImage image = ImageIO.read(input);
for (int i = 0; i < image.getWidth(); i++) {
        for (int j = 0; j < image.getHeight(); j++) {
            Color c = new Color(image.getRGB(i, j));
            powerspectrum[i][j] = (int) ((c.getRed() * 0.299)
                    + (c.getGreen() * 0.587) + (c.getBlue() * 0.114));
        }
    }

限制我的图像

for (int i = 0; i < image.getWidth(); i++) {
        for (int j = 0; j < image.getHeight(); j++) {
            if (gradient[i][j] <= upperthreshold
                    && gradient[i][j] >= lowerthreshold)
                spaces[i][j] = 255;
            else
                spaces[i][j] = 0;
            Color gradColor = new Color(spaces[i][j], spaces[i][j],
                    spaces[i][j]);
            image.setRGB(i, j, gradColor.getRGB());
        }
    }

保存我的图像

File gradoutput = new File("/../Screenshots/3_GradThresh.jpg");
    ImageIO.write(image, "jpg", gradoutput);

我不知道如何切断其他强度值。

【问题讨论】:

    标签: java image image-processing threshold


    【解决方案1】:

    我怀疑这是因为 JPG 是一种有损格式。当您将 JPG 保存到磁盘时,它会进行压缩。尝试使用位图来查看是否会删除这些相邻的灰色区域值。

    【讨论】:

    • 不确定 ImageIO 是否可以保存位图,但 png 文件应该也可以!
    • Matthias 让我很好奇,所以我查了一下 here。 ImageIO 支持 BMP、PNG、WBMP(无线位图,每个像素都是简单的黑色或白色)和 GIF(以及 JPG)。从尺寸的角度来看,GIF 或 PNG 是不错的选择。
    • @JohnC 非常感谢。我所做的只是 ImageIO.write(image,"bmp", output) 并且仍然将其保存为 jpg。
    • @PsiLambdaDelta,如果您正在做我认为您正在做的事情(命名二进制内容为 bmp 格式“xyz.jpg”的文件),您可能需要小心。我想不出这会导致什么具体问题,但这并不是一个很好的做法(即使表面上它们都包含文本,你也不会命名 .docx .txt)。您是否有理由要使用 .jpg 文件名?
    【解决方案2】:

    +1 与 jpg 压缩问题。在图像处理中,我们使用 PNG(最好的无损压缩格式)或 TIFF(最坏的情况)。

    顺便说一句,setRGB/getRGB 方法的性能很差。最快的就是直接修改DataBuffer,但是对于每一种图像编码都得做。另一种解决方案(但速度较慢)是使用光栅。那你就不用担心编码了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2023-04-03
      • 2011-07-09
      • 1970-01-01
      相关资源
      最近更新 更多