从扫描文档opencv python中提取衬里表

问题描述 投票:2回答:3

我想从扫描的表中提取信息并将其存储为csv。现在我的表提取算法执行以下步骤。

  1. 应用倾斜校正
  2. 应用高斯滤波器进行去噪。
  3. 使用Otsu阈值进行二值化
  4. 做一个形态开放。
  5. Canny边缘检测
  6. 进行霍夫变换以获得表格线。
  7. 删除重复的行(10个像素范围内的相同行)
  8. 使用线的斜率过滤水平和垂直线(对于水平和垂直的垂直,斜率应小于+/- 5度)。

该算法适用于数字生成的pdf和大多数扫描文档。但是,有些文件有一个嘈杂的表格,因此没有正确识别线条。

这是我的算法失败的示例图像。

raw image

这些是我在这张桌子上做的操作。 1.高斯模糊

Gaussian blur

2。新年的缘故

Otsu thresholding

3.形态开放

Morphological opening

4.Canny边缘检测

Canny edge detection

5.过滤后的线条,正如您所看到的那样,明显无法正确识别线条。

filtered lines,as you can see the lines are clearly not identified correctly.

任何人都可以建议更好的方法从这种质量较低的扫描中提取水平和垂直线。

提前致谢!!

python opencv hough-transform opencv-python
3个回答
1
投票

问题是并且始终是你没有完美的线条。这种方法的一个解决方案可以是:

  • 像您一样将阈值图像设置为灰度。
  • 现在找到图像中最大的轮廓,这将是您的表格。
  • 现在使用Floodfill将表与图像分开,通过选择轮廓上的任何点来创建泛光蒙版,

1
投票

我在这篇博客中找到了完美的解决方案。 https://medium.com/coinmonks/a-box-detection-algorithm-for-any-image-containing-boxes-756c15d7ed26

在这里,我们使用垂直内核来检测垂直线和水平内核以检测水平线,然后将它们组合以获得所有需要的线,从而进行形态变换。

垂直线Vertical lines

水平线Horizontal lines

要求输出required output


0
投票

问题可能出在HoughLinesTransform()中

您可以尝试使用:HoughLinesTransformP()

为了使HoughLinesTranform()完美地工作,线条必须是完美的。从您提供的图像中,您可以清楚地看到失真,这显然导致方法失败。

尝试先扩大图像。 Image Dilation in Python.

© www.soinside.com 2019 - 2024. All rights reserved.