如何在图像中找到类似表格的结构

9 浏览
0 Comments

如何在图像中找到类似表格的结构

我有不同类型的发票文件,我想在每个发票文件中找到表格。在这个表格中,位置是不固定的。所以我采用了图像处理的方法。首先我尝试将我的发票转换成图像,然后找到基于表格边框的轮廓,最后我可以得到表格的位置。

为了完成这个任务,我使用了以下代码:

with Image(page) as page_image:
    page_image.alpha_channel = False # 消除透明度
    img_buffer=np.asarray(bytearray(page_image.make_blob()), dtype=np.uint8)
    img = cv2.imdecode(img_buffer, cv2.IMREAD_UNCHANGED)
    ret, thresh = cv2.threshold(img, 127, 255, 0)
    im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    margin=[]
    for contour in contours:
        # 获取包围轮廓的矩形
        [x, y, w, h] = cv2.boundingRect(contour)
        # 不绘制小的错误结果,这些不是文本
        if (w >thresh1 and h> thresh2):
                margin.append([x, y, x + w, y + h])
    # 对边界进行数据清理以提取所需的位置值。

在这段代码中,我会根据文件的情况更新`thresh1`和`thresh2`的值。

使用这段代码,我可以成功读取图像中表格的位置,使用这些位置,我将处理我的发票pdf文件。例如:

样本1:

[链接](https://i.stack.imgur.com/NJXjD.png)

样本2:

[链接](https://i.stack.imgur.com/Ntbce.png)

样本3:

[链接](https://i.stack.imgur.com/SqpiK.png)

输出:

样本1:

[链接](https://i.stack.imgur.com/MIaGH.png)

样本2:

[链接](https://i.stack.imgur.com/CXv8x.png)

样本3:

[链接](https://i.stack.imgur.com/d76gQ.png)

但是,现在我有了一种新的格式,它没有任何边框,但是它是一个表格。如何解决这个问题?因为我的整个操作都仅依赖于表格的边框。但是现在我没有表格边框了。我该如何解决这个问题?我对解决这个问题没有任何想法。我的问题是,是否有办法根据表格结构找到位置?

例如,我的问题输入如下:

[链接](https://i.stack.imgur.com/Fw3Qa.jpg)

我想要找到它的位置,如下所示:

[链接](https://i.stack.imgur.com/5or8D.png)

如何解决这个问题?

非常感谢您提供解决这个问题的思路。

提前致谢。

0