使用OpenCV Python从扫描文档中提取带有线条的表格。

7
我希望从扫描表格中提取信息并将其存储为csv。目前,我的表格提取算法执行以下步骤:
  1. 应用倾斜校正
  2. 使用高斯滤波器进行降噪。
  3. 使用Otsu阈值进行二值化
  4. 进行形态学开运算。
  5. Canny边缘检测
  6. 进行霍夫变换以获取表格线。
  7. 删除重复线(在10个像素范围内相同的线)
  8. 使用线的斜率过滤水平和垂直线(水平线的斜率应小于+/-5度,垂直线的法线应小于+/-5度)。
这个算法对于数字 born 的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.

请问有没有更好的方法可以从这种低质量扫描件中提取水平和垂直线条。

谢谢提前!

3个回答

4

1
问题是,现在并且以后都将是您没有完美的线条。 这种方法的一个解决方案可以是:
  • 像您所做的那样将图像阈值化为灰度。
  • 现在找到图像中最大的轮廓,这将是您的表格。
  • 现在使用Floodfill从图像中分离表格,通过选择轮廓上的任意点创建一个淹没掩模。

0

问题可能出在HoughLinesTransform()

你可以尝试使用:HoughLinesTransformP()

为了让HoughLinesTranform()完美地工作,线条需要是完美的。从您提供的图像中,您可以清楚地看到明显的扭曲,这显然导致该方法失败。

首先尝试膨胀您的图像。Python中的图像膨胀。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接