使用OpenCV检测表

时间:2015-10-31 13:36:28

标签: opencv computer-vision vision

我经常使用扫描文件。这些文件包含我需要手动输入计算机的表格(类似于Excel表格)。为了使任务更糟,表可以具有不同数量的列。手动将它们输入Excel是至关重要的。

如果我能把程序放到OCR上,我想我可以节省一周的工作时间。是否可以使用OpenCV检测标题文本区域,并检测检测到的图像坐标后面的文本。

我可以在OpenCV的帮助下实现这一目标,还是需要采用完全不同的方法?

编辑:示例表实际上只是一个标准表,类似于您在Excel和其他电子表格应用程序中可以看到的内容,请参见下文。

enter image description here

1 个答案:

答案 0 :(得分:5)

这个问题看起来有点旧,但我也在研究类似的问题并得到了我自己的解决方案,我在这里解释。

对于使用任何OCR引擎阅读文本,有很多挑战,以获得良好的准确性,包括以下主要案例:

  1. 由于背景区域中的图像质量差/不需要的元素/斑点而存在噪声。这将需要一些预处理,如噪声消除,这可以使用高斯滤波器或普通中值滤波器方法轻松完成。这些也可以在opencv

  2. 中找到
  3. 图像方向错误:由于方向错误,OCR引擎无法正确分割图像中的线条和单词,从而导致精度最低。

  4. 行的存在:在进行单词或行分割时,OCR引擎有时也会尝试将单词和行合并在一起,从而处理错误的内容,从而产生错误的结果。 还有其他问题,但这些是基本问题。
  5. 在这种情况下,我认为扫描图像质量非常好而且简单,可以使用以下步骤解决问题。

    1. 简单图像二值化将删除背景内容,只留下必要的内容,如下所示。 Binary image
    2. 现在我们必须删除在这种情况下是表格网格的行。这也可以使用连接组件识别并删除大型连接组件。因此,我们需要输入OCR引擎的最终图像将如下所示。

      enter image description here

    3. 对于OCR,我们可以使用Tesseract开源OCR引擎。我从OCR得到了以下结果:

      标题标题

      头! header2 header3

      row1cell1 row1cell2 row1cell3

      row2cell1 row2cell2 row2cell3

    4. 正如我们在这里看到的那样,结果非常准确,但也存在一些问题 标题!应该是 header1 ,这是因为OCR引擎误解了!使用基于Regex的操作进一步处理结果可以解决此问题。

    5. 在对OCR结果进行后处理后,可以对其进行解析以读取行和列值。

      此外,在这种情况下,为了对表格标题,标题和正常单元格值进行分类,可以使用它们的字体信息。