java - java.awt.image.BufferedImage 的二值化规则是什么

标签 java image awt bufferedimage color-space

我可以使用这个代码

BufferedImage image = ImageIO.read(new File("toolbar.png"));
BufferedImage grayImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
Graphics graphics = grayImage.getGraphics();
graphics.drawImage(image, 0, 0, null);
graphics.dispose();

将 BufferedImage 从 TYPE_3BYTE_BGR 转换为 TYPE_3BYTE_BGR。

例如,输入:

enter image description here

输出:

enter image description here

我知道彩色像素根据计算规则变成白色像素或黑色像素。它是什么,我可以做些什么来调整它?提前感谢您的帮助。

最佳答案

上面代码中的转换是一种隐式转换,因为输入图像 (RGB) 具有比目标图像(二进制索引颜色)更多的颜色。

这种转换为二元颜色的“规则”可以简单地描述为“在目标中选择最接近输入颜色的颜色”。由于您的颜色只有黑色和白色,所有 R、G 和 B 平均值低于 50% 的颜色都将变为黑色,其余颜色将变为白色。没有办法直接“调整”它。

但是,您可以直接控制阈值或根据输入计算阈值,以获得更好的图像。参见示例 this blog举个例子。

关于java - java.awt.image.BufferedImage 的二值化规则是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27654161/

相关文章:

java - GORM/Grails 中的家谱模型?

R- 栅格数学,同时保留整数格式

javascript - 从 IMG SRC 中删除第一个正斜杠

java - 如何将带有 GroupLayout 的面板添加到 JFrame?

java - 元件尺寸问题!由于我不知道的原因调整为 parent 的尺寸!

java - 在学习 Swing 之前必须先学习 AWT 吗?

java - JPA 乐观锁定规范是否支持根据客户端提供的版本进行验证

java - JBoss Fuse - 获取体型

java - 数据源无法通过 Spring boot 应用程序初始化?

css - 将图像左上、居中和右下对齐