【问题标题】:Complete/fill letters OpenCV C++完成/填写字母 OpenCV C++
【发布时间】:2014-05-30 13:41:32
【问题描述】:

我正在尝试对下图进行 OCR 预执行,您可能会注意到许多字母不完整。它们缺少部分,导致 Tesseract 产生一些不好的结果。

我曾尝试使用以下代码侵蚀图像,但似乎没有做太多:

Mat eroded;
double element_size = 25;
RNG rng(12345);
Mat element = getStructuringElement( cv::MORPH_ELLIPSE,cv::Size( 2*element_size + 1, 2*element_size+1 ),cv::Point( element_size, element_size ) );
erode(src, eroded, element);

有谁知道如何锐化此文本以使字母保持一致?

【问题讨论】:

  • 您提出了一个问题,3 个用户回答了,您没有接受任何一个,您没有回答任何一个。并问了一个关于同一问题的新问题?你不值得被回答......

标签: c++ ios opencv text


【解决方案1】:

您似乎已经对图像进行了一些预处理,否则我认为相机捕获的图像自然不会看起来那样。在这种情况下,我建议使用自适应阈值(adaptive thresholding api in opencv) 而不是自己设置阈值。查看(some explanation on how it works) 中的差异。它通常比使用魔法阈值更好。

另外,我怀疑形态学操作会有所帮助。

【讨论】:

    【解决方案2】:

    您是尝试对您提供的二进制图像执行 OCR,还是对另一个图像执行一些操作并获取该二进制图像?您不应该试图提高该图像的质量。

    这样想。您有一张图片,但该图片的某些部分丢失了。你正试图找出这些部分是什么。这不是锐化问题。这是一个巨大的问题。所以我认为你应该从原始图像中获得更好的二值图像来执行 OCR。

    祝你好运。

    【讨论】:

      【解决方案3】:

      回顾数字图像处理,我认为Laplacian-GaussianSobel 过滤将有助于锐化图像。通常差分滤波器是高频通过/放大滤波器,因此使用这种滤波器进行滤波会导致图像中的高频放大(即边缘、细节)。现在就 OCR 而言,直观地说,我认为原始图像上的高斯拉普拉斯算子会提高性能。高斯上的拉普拉斯算子实际上是一个双通滤波器。首先,高斯滤波器将放大图像的低频,因此会放大暗像素的强度(即,您发布的图像上的间隙),而作为二阶微分滤波器的拉普拉斯滤波器将放大高频和这样会产生所需的锐化效果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多