【发布时间】:2016-04-09 03:34:39
【问题描述】:
我正在使用 tess-two 库,我希望将图像中除黑色以外的所有颜色转换为白色(黑色将是文本)。从而使 tess-two 更容易阅读文本。我尝试了各种方法,但是它们在逐像素转换时花费了太多时间。有没有办法使用画布或任何可以更快产生结果的东西来实现这一点。
更新
这个算法带来的另一个问题是打印机不能使用与 android 中相同的黑色和白色进行打印。所以算法将整张图片转为白色。
我目前正在使用的逐像素方法。
binarizedImage = convertToMutable(cropped);// the bitmap is made mutable
int width = binarizedImage.getWidth();
int height = binarizedImage.getHeight();
int[] pixels = new int[width * height];
binarizedImage.getPixels(pixels, 0, width, 0, 0, width, height);
for(int i=0;i<binarizedImage.getWidth();i++) {
for(int c=0;c<binarizedImage.getHeight();c++) {
int pixel = binarizedImage.getPixel(i, c);
if(!(pixel == Color.BLACK || pixel == Color.WHITE))
{
int index = c * width + i;
pixels[index] = Color.WHITE;
binarizedImage.setPixels(pixels, 0, width, 0, 0, width, height);
}
}
}
【问题讨论】:
-
你可以使用
ColorMatrix吗? - 用于转换位图的颜色和 alpha 分量的 4x5 矩阵。 - -
感谢@Blackbelt 的评论,但请您提供一些帮助以了解 ColorMatrix 将如何提供帮助
-
至少修复你的循环。说真的,您循环遍历像素的大小(宽度*高度),然后简单地执行 if (pixel[i] == Color.BLACK) continue 然后将像素设置为白色。没有必要关心它的尺寸。这是一个整数数组,你想对它们都这样做。
-
您可以在渲染脚本中更快地执行此操作,这将是相当微不足道的,并且会在 GPU 上完成所有工作。但是,我真的也认为 Rishabh 是对的,它应该可以在 ColorMatrix 中完成。
标签: android canvas bitmap tesseract