如何从文本图像中删除虚线?

时间:2018-03-16 09:25:27

标签: image-processing imagemagick ocr imagemagick-convert

我正在处理的一个问题是对文档进行OCR。一些paystub文档有一个带点的突出显示行,以区分重要元素,如总薪酬,净薪酬等。

For Reference

这些点在OCR中给出了错误的结果,它认为它们是':'性格并没有给出预期的结果。我已经尝试了许多用于图像处理的东西,比如ImageMagick等,以去除这些点。但在每种情况下,整个文本数据的质量都会降低,从而导致OCR不良。

我尝试过的ImageMagick命令是:

转换mm150.jpg -kuwahara 3 mm2.jpg

我也尝试过连接组件,内核侵蚀等,但每种方法都失败了。

我想知道是否应该遵循一些方法,或者我是否遗漏了图像处理功能。

1 个答案:

答案 0 :(得分:5)

可以使用opencv的connectedComponentsWithStats函数解决此问题。我从这个问题How do I remove the dots / noise without damaging the text?

中找到了对此的参考

我根据自己的需要改变了一点。这是帮助我获得所需输出的代码。

    import cv2
    import numpy as np
    import sys

    img = cv2.imread(sys.argv[1], 0)
    _, blackAndWhite = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)


    nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(blackAndWhite, 4, cv2.CV_32S)
    sizes = stats[1:, -1] #get CC_STAT_AREA component
    img2 = np.zeros((labels.shape), np.uint8)

    for i in range(0, nlabels - 1):
        if sizes[i] >= 8:   #filter small dotted regions
            img2[labels == i + 1] = 255

    res = cv2.bitwise_not(img2)

    cv2.imwrite('res.jpg', res)

我得到的输出文件非常清楚,删除了虚线带,因为它可以提供完美的OCR结果。

enter image description here