如何使用OpenCV对图像进行处理,使文本变得清晰? 您所在的位置:网站首页 图片字不清晰怎么处理 如何使用OpenCV对图像进行处理,使文本变得清晰?

如何使用OpenCV对图像进行处理,使文本变得清晰?

2024-03-16 17:46| 来源: 网络整理| 查看: 265

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

在搜索解决方案时,大多数答案都是通用指令,例如建议查看自适应滤波器、高斯模糊、膨胀和侵蚀,但它们都没有提供任何示例代码(因此可以玩弄这些值)。

我知道不同的图像需要不同的方法和值来达到最佳的清晰度,但我只需要一些通用的滤波器,以便在对图像进行任何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

原图:

应用上述内容后:

怎样做才是正确的呢?

更新:多亏了metsburg,berak和Aurelius,让它更接近了

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

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

结果:

使用返回的GaussianBlur方法,结果实际上稍好一些:

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

结果:

对于这张图片,差别并不明显,所以我尝试了另一张图片,这是从电脑屏幕上拍摄的照片。计算机屏幕会产生大量的噪声(波浪线),因此很难消除这些噪声。

示例原图:

直接应用otsu:

在otsu之前使用medianBlur:

在otsu之前使用GaussianBlur:

看起来高斯模糊稍微好一点,但是我仍然在玩设置。如果有人能建议如何进一步改进电脑屏幕照片,请让我们知道:)还有一件事。在顶部链接内的图像上使用此方法会产生可怕的结果:(请参阅此处:http://imgur.com/vOZAaE0



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有