android - 如何使用OpenCV对图像进行处理,使文字清晰清晰?

标签 android opencv

想要实现这样的目标:http://www.leptonica.com/binarization.html

在搜索解决方案时,大多数答案都是一般性说明,例如建议查看自适应滤波器、高斯模糊、膨胀和腐 eclipse ,但它们都没有提供任何示例代码以开始使用(因此可以使用这些值) ..

我知道不同的图像需要不同的方法和值来获得最佳清晰度,但我只需要一些通用滤镜,以便在对图像进行任何 OCR 之前,图像与原始图像相比至少稍微锐利一点且噪点更少。

这是我迄今为止尝试过的......

Mat imageMat = new Mat();
Utils.bitmapToMat(photo, imageMat);
Imgproc.cvtColor(imageMat, imageMat, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0);
Imgproc.adaptiveThreshold(imageMat, imageMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 5, 4);

但是作为一个图像处理新手,显然我不知道我在做什么XD

原图: original image

应用上述内容后: image after applying filters

如何正确做?

更新:多亏了 metsburg、berak 和 Aurelius,让我们更接近了

使用 medianBlur 方法,因为带有 CV_MEDIAN 的 cvSmooth 已被弃用并替换为 medianBlur:

Imgproc.medianBlur(imageMat, imageMat, 3);
Imgproc.threshold(imageMat, imageMat, 0, 255, Imgproc.THRESH_OTSU);

结果: using medianblur before applying otsu

使用回GaussianBlur方法,效果其实稍微好一点:

Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0);
Imgproc.threshold(imageMat, imageMat, 0, 255, Imgproc.THRESH_OTSU);

结果: using gaussianblur before applying otsu

对于这张图片,差异并不明显,所以我尝试了另一张图片,它是从电脑屏幕上拍摄的照片。电脑屏幕会产生很多噪音(波浪线),因此很难消除噪音。

示例原始图像: pcscreen original image

直接应用大津: pcscreen directly apply otsu

在 otsu 之前使用 medianBlur: pcscreen using medianBlur before applying otsu

在 otsu 之前使用 GaussianBlur: pcscreen using GaussianBlur before applying otsu

似乎高斯模糊稍微好一些,但我仍在使用设置.. 如果有人可以就如何进一步改进计算机屏幕照片提出建议,请告诉我们:) 还有一件事.. 在顶部链接内的图像上使用此方法会产生可怕的结果:( 在这里查看:http://imgur.com/vOZAaE0

最佳答案

嗯,你快到了。试试这些修改:

代替

    Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0);

尝试:

     cvSmooth(imageMat, imageMat, CV_MEDIAN, new Size(3, 3), 0);

检查语法,可能不完全匹配

您发布的链接使用 Otsu 的阈值,所以试试这个:

 Imgproc.threshold(imageMat, imageMat, 0, 255, Imgproc.THRESH_OTSU);

用于阈值。

试着在这里和那里调整参数,你应该会得到非常接近你想要的结果的东西。

关于android - 如何使用OpenCV对图像进行处理,使文字清晰清晰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17874149/

相关文章:

安卓支持工具栏 : Resizing won't realign menu items

android - Flutter Release bundle 或 APK 在启动时崩溃,dlopen 失败 : library "libflutter.so" not found

c++ - 如何动态地为 Vector<Point> 分配内存?

java - 如何使用 OpenCV 将图像转换为黑白图像并去除 android 中的阴影

python - 使用 CV 从图像中提取树数

android - 从数据库中删除项目 - ListView - Android

java - 创建风玫瑰安卓

java - 为 Android 构建 Facebook 登录应用程序

python - OpenCV-Python : How to get latest frame from the live video stream or skip old ones

opencv - OpenCV 中基本矩阵的基本矩阵