将位图中特定颜色以外的所有颜色转换为白色

Ris*_*ari 6 android tesseract canvas bitmap

我正在使用tess-two库,我希望将我图像中除黑色之外的所有颜色转换为白色(黑色将是文本).从而使tess-two更容易阅读文本.我已经尝试了各种方法,但是他们花费了太多时间,因为它们逐像素地转换.有没有办法使用画布或任何能够更快地提供结果的东西来实现这一点.

UPDATE

该算法提出的另一个问题是打印机不能使用与Android中相同的BLACK和White打印.因此算法将整个图像转换为白色.

我目前使用的逐像素方法.

 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);
          }
     }
 }
Run Code Online (Sandbox Code Playgroud)

Tat*_*ize 1

Per,Rishabh 的评论。使用颜色矩阵。由于黑色就是黑色并且是 RGB(0,0,0,255),因此它不受乘法的影响。因此,如果将所有通道中的所有内容乘以 255,所有内容都将超出限制并卷曲为白色,但黑色除外,它将保持黑色。

       ColorMatrix bc = new ColorMatrix(new float[] {
                255, 255, 255, 0, 0,
                255, 255, 255, 0, 0,
                255, 255, 255, 0, 0,
                0, 0, 0, 1, 0,
        });
        ColorMatrixColorFilter filter = new ColorMatrixColorFilter(bc);
        paint.setColorFilter(filter);
Run Code Online (Sandbox Code Playgroud)

您可以使用该涂料以仅黑色保持黑色的颜色矩阵滤镜效果来绘制该位图。

注意:这是一个快速且很棒的技巧,但是,它适用于黑色。虽然它非常适合您的使用,并将把冗长的操作变成即时的东西,但它实际上并不符合“特定颜色”的标题问题,我的算法适用于您想要的任何颜色,只要它是黑色的。