繁体   English   中英

如何在 Java 中设置阈值和 BufferedImage

[英]How to threshold and BufferedImage in Java

我已经在 J​​ava 中将我的原始图像读取为 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);

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

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

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

顺便说一句,setRGB/getRGB 方法的性能很差。 最快的是直接修改DataBuffer,但是你必须对每种类型的图像编码都这样做。 另一种解决方案(但速度较慢)是使用 Raster。 然后你不必担心编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM