java - 将彩色图像转换为背景/白色图像

标签 java image bufferedimage tiff

我正在努力将彩色图像转换为黑白图像。我使用 BufferedImage 来实现此目的,类型为 TYPE_BYTE_BINARY。但输出图像未正确转换。例如,如果图像在黑色背景上包含蓝色字母,则该部分的结果图像为全黑。有谁能够帮助我?我的代码如下。

//Invert the colormodel
byte[] map = new byte[] { (byte) (255), (byte) (0) };
IndexColorModel colorModel = new IndexColorModel(1, 2, map,
map, map);

BufferedImage bufferedImage = new BufferedImage(
img.getWidth(null), img.getHeight(null),
BufferedImage.TYPE_BYTE_BINARY, colorModel);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(img, 0, 0, null);
g2.dispose();

最佳答案

蓝色的强度非常低,因此蓝色(如 RGB(0, 0, 255))在转换为阈值 50% 的黑白时会变成黑色是可以预料的。在转换为黑白之前尝试使原始图像变亮,以增加图像的白色部分。

您可以使用RescaleOp在转换之前使图像变亮,或将实例与图像一起传递到 drawImage以 BufferedImageOp 作为参数的方法。请注意,您可以独立缩放 R、G 和 B 值。

关于java - 将彩色图像转换为背景/白色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18758277/

相关文章:

java - ListView 中的图像从行跳转到行

java - 为什么当我加载大约 11k 个大小约为 40mb 的图像时会出现 java 堆空间异常

java - 为什么 BufferedImage 需要超出其数据数组大小的内存?

java - 如何将 Cucumber 中的 DataTable 转换为对象列表?

java - 使用模式匹配算法进行入侵检测

javascript - 加载以不显示的形式上传的图像

javascript - Twitter个人资料图片 uploader 如何在客户端显示图片预览

java - 什么是图 block 以及它们是如何在 BufferedImage 中创建的

java - 在方法中返回 Java 子级

java - 解析 WSDL 以提取服务/端口元素