java - 在 Android 中对图像进行二值化

标签 java android image image-processing

我正在开发使用 tesseract OCR 从图像中扫描文本的 android 应用程序,
我听说在对图像进行 OCR 之前将图像二值化会得到更好的结果,
所以我开始寻找执行操作的代码,

我发现很少,但它实际上是在 java 中并且需要 awt 库......所以它们不能在 android 上工作。
那你能帮我找一个吗?
谢谢

最佳答案

我必须完成一项类似的任务,作为任务项目的一部分。我在我的工作区中找到了这段代码,我想这就是你需要的:

Bitmap img = BitmapFactory.decodeResource(this.getResources(), drawable.testimage);
Paint paint = new Paint();

ColorMatrix cm = new ColorMatrix();
float a = 77f;
float b = 151f;
float c = 28f;
float t = 120 * -256f;
cm.set(new float[] { a, b, c, 0, t, a, b, c, 0, t, a, b, c, 0, t, 0, 0, 0, 1, 0 });
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(img, 0, 0, paint);

在这里,我使用 ColorMatrix 从彩色图像生成黑白图像。我还发现了这段用于将彩色图像转换为灰度图像的代码:

Bitmap result = Bitmap.createBitmap(destWidth, destHeight,Bitmap.Config.RGB_565);
RectF destRect = new RectF(0, 0, destWidth, destHeight);
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(0);
ColorFilter filter = new ColorMatrixColorFilter(colorMatrix);
paint.setColorFilter(filter);
canvas.drawBitmap(bitmap, sourceRect, destRect, paint); 

希望对你有帮助。

关于java - 在 Android 中对图像进行二值化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375471/

相关文章:

java - 无法访问不同 Servlet 中的 SessionScoped 实体

java - 如何在选项卡更改时更改 Activity 标题(滑动 TabLayout)

java - 如何从字符串或 json 对象中搜索并打印特定内容

android - IntelliJ 9 和 Android - 过滤 LogCat

android - 如何最小化android wear上的卡片?

android - 在 Android 上裁剪图像的透视变换

java - 通过 Canvas 缩放后 BufferedImage 变成全黑

java - 如何从 Scala 调用将参数作为 List<Class<?>> 的 java 方法

android - 如何以编程方式在 Android 中重置 Google 广告 ID?

css - 在 SweetAlert 上更改图标图像大小