use*_*209 5 java monochrome bufferedimage image
如何将现有的彩色BufferedImage转换为单色?我希望图像只在两个rgb代码之间完全分开,黑色和白色.因此,如果图像周围的边框是背景的较浅或较暗的阴影,并且背景正在转换为白色,那么我希望边框也转换为白色,依此类推.
我怎样才能做到这一点?
如果需要保存图像/从磁盘加载它,我可以在必要时这样做.
编辑:代码来测试这个:
package test;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashSet;
import javax.imageio.ImageIO;
public class Test
{
public static void main(String[] args)
{
try
{
BufferedImage img = ImageIO.read(new File("http://i.stack.imgur.com/yhCnH.png") );
BufferedImage gray = new BufferedImage(img.getWidth(), img.getHeight(),
BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g = gray.createGraphics();
g.drawImage(img, 0, 0, null);
HashSet<Integer> colors = new HashSet<>();
int color = 0;
for (int y = 0; y < gray.getHeight(); y++)
{
for (int x = 0; x < gray.getWidth(); x++)
{
color = gray.getRGB(x, y);
System.out.println(color);
colors.add(color);
}
}
System.out.println(colors.size() );
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用的图像:
使用这个,我得到24的输出作为最后一个输出,即在该图像中找到24种颜色,当应该有2.
解决方案是使用BufferedImage.TYPE_BYTE_BINARY
类型而不是TYPE_BYTE_GRAY
.使用BINARY会创建图像的纯黑白副本,除了b&w之外没有任何颜色.看起来不太漂亮,但对于像OCR这样的颜色需要精确的东西来说非常完美.