【问题标题】:Removing Gridlines from Scanned Graph Paper Documents从扫描的方格纸文档中删除网格线
【发布时间】:2021-05-27 07:59:47
【问题描述】:

我想使用 Python 从扫描的文档中删除网格线,以使其更易于阅读。

这是我们正在使用的内容的 sn-p:

如您所见,网格中存在不一致,更糟糕的是,扫描并不总是方形的。五个示例文档可以在here找到。

我对您为此建议的任何方法持开放态度,但在涉及打破机器学习技术之前,使用 openCV 和 pypdf 可能是一个不错的起点。

This post 解决了类似的问题,但没有解决方案。用户发布了以下代码 sn-p 可能会感兴趣(老实说我没有测试它,我只是为了方便您把它放在这里)。

import cv2
import numpy as np

def rmv_lines(Image_Path):
    img = cv2.imread(Image_Path)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray,50,150,apertureSize = 3)
    minLineLength, maxLineGap = 100, 15
    lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
    for x in range(0, len(lines)):
        for x1,y1,x2,y2 in lines[x]:
        #if x1 != x2 and y1 != y2:
            cv2.line(img,(x1,y1),(x2,y2),(255,255,255),4)
    return cv2.imwrite('removed.jpg',img)

如果可能,我希望最终文件为 pdf 格式。

【问题讨论】:

  • 请注意这不是代码编写或辅导服务。我们可以帮助解决具体的技术问题,而不是对代码或建议的开放式请求。请编辑您的问题以显示您迄今为止尝试过的内容,以及您需要帮助的具体问题。请参阅How To Ask a Good Question 页面,详细了解如何最好地帮助我们。
  • 很公平,我应该删除这篇文章吗?我相当精通python,但不擅长图像处理,所以我希望能在这些方面得到一些帮助。

标签: python-3.x machine-learning image-processing opencv3.0 pypdf2


【解决方案1】:

(免责声明:我是pText 的作者,此答案中使用的库)

我可以为您提供部分帮助(从 PDF 中提取图像)。

首先加载Document。 你会看到我在PDF.loads 方法中传递了一个额外的参数。 SimpleImageExtraction 的作用类似于 PDF 说明的 EventListener。每当遇到要渲染图像的指令时,它都会截取该指令并存储图像。

with open(file, "rb") as pdf_file_handle:
    l = SimpleImageExtraction()
    doc = PDF.loads(pdf_file_handle, [l])

现在我们已经加载了Document,并且SimpleImageExtraction 应该有机会发挥它的魔力,我们可以输出图像了。在本例中,我只是将它们存储起来。

    for i, img in enumerate(l.get_images_per_page(0)):
        output_file = "image_" + str(i) + ".jpg"
        with open(output_file, "wb") as image_file_handle:
            img.save(image_file_handle)

您可以通过GitHub 或使用PyPi 获取pText 还有很多 examples,请查看它们以了解有关处理图像的更多信息。

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多