【问题标题】:How to extract the text contents which is over the table lines using opencv python? [duplicate]如何使用opencv python提取表格行上方的文本内容? [复制]
【发布时间】:2020-05-19 19:20:06
【问题描述】:

我正在尝试使用 OpenCV 和 Pytesseract 提取表格内容。但是,每当删除表格行时,它都会影响该行上的文本像素。是否可以在行删除过程之后检索像素或阻止像素它?..

这是整个图像的表格区域

【问题讨论】:

    标签: python opencv image-processing


    【解决方案1】:

    我在我的 Gists 存档中找到了一个可能对你有用的 sn-p - 不幸的是,它不是我的代码,我没有它的原始来源,但简而言之,这个概念是使用 CV2 morphological transformations 首先删除水平使用水平内核的线条,然后用较小的垂直内核填充缺失的像素。

    您可以尝试使用不同的内核和参数,看看是否可以让它更好地适应您的特定情况。我建议首先删除水平线并检查 Pyteseract 如何处理它,而无需任何额外的后处理。请注意,当我们填充缺失的像素时 - 其他一些文本变得不那么可读了。

    import cv2
    
    image = cv2.imread('./dumpster/dVbYd.jpg')
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
    
    # Remove lines using horizontal kernal
    horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25,1))
    detected_lines = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, horizontal_kernel, iterations=2)
    cnts = cv2.findContours(detected_lines, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    for c in cnts:
        cv2.drawContours(image, [c], -1, (255,255,255), 2)    
    
    # Repair image using smaller vertical kernel
    repair_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 6))
    result = 255 - cv2.morphologyEx(255 - image, cv2.MORPH_CLOSE, repair_kernel, iterations=1)
    
    plt.figure(figsize=(15,10))
    plt.imshow(gray, cmap='gray')
    plt.show()
    
    plt.figure(figsize=(15,10))
    plt.imshow(image)
    plt.show()
    
    plt.figure(figsize=(15,10))
    plt.imshow(result)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2017-09-15
      • 1970-01-01
      • 2020-11-22
      • 2023-04-05
      • 2012-03-12
      • 2012-05-23
      • 2020-04-17
      • 2015-09-03
      • 1970-01-01
      相关资源
      最近更新 更多