我正在开发和OCR。 OCR应接受任何其他颜色的普通背景上具有任何颜色字体的文本图片。为此,我需要将输入图像转换为二进制(1位图像)。
对于黑色(或深色)背景下的白色字体,这非常简单。如果我的字体颜色和背景颜色高度对比,那仍然很容易。但是,我很难同时颜色都很暗或很浅。
我一直在使用此代码将彩色BufferedImage
转换为二进制代码。它适用于对比色。但是当两种颜色都是黑暗或浅色时它会失败。
public static BufferedImage binarizeImage(BufferedImage img_param)
{
//grey
BufferedImage img_grey = new BufferedImage(img_param.getWidth(), img_param.getHeight(),
BufferedImage.TYPE_BYTE_GRAY);
Graphics g1 = img_grey.getGraphics();
g1.drawImage(img_param, 0, 0, null);
g1.dispose();
//showImageBuffer(img_grey);
//b&w
BufferedImage image = new BufferedImage(img_grey.getWidth(), img_grey.getHeight(),
BufferedImage.TYPE_BYTE_BINARY);
Graphics g2 = image.getGraphics();
g2.drawImage(img_grey, 0, 0, null);
g2.dispose();
//showImageBuffer(img_grey);
return image;
}
例如,如果我尝试二值化此图像:(红色通道:255,蓝色和绿色通道:0) 我得到一个坚实的黑色图像。
有人可以帮助我,并提示采用更可靠的方法。转换为二进制,上下文的代码。
此外,我还希望在转换为二进制文件后,字体颜色始终为白色,背景为黑色。
提前谢谢
修改 如果找到代码here。这可能对某些人有用。