image-processing - 如何从文本图像中删除虚线带?

标签 image-processing imagemagick ocr imagemagick-convert

我正在处理的其中一个问题是对文档进行 OCR。一些工资单文件有一 strip 点的突出线,以区分重要元素,如总工资、净工资等。

For Reference

这些点在 OCR 中给出了错误的结果,它认为它们是“:”字符并且没​​有给出预期的结果。我已经尝试了很多图像处理方法,例如 ImageMagick 等来去除这些点。但在每种情况下,整个文本数据的质量都会下降,从而导致 OCR 效果不佳。

我尝试过的 ImageMagick 命令是:

转换 mm150.jpg -kuwahara 3 mm2.jpg

我也尝试过连接组件、内核侵 eclipse 等,但每种方法都以某种方式失败。

我想知道我是否应该遵循某种方法,或者我是否遗漏了图像处理功能中的某些内容。

最佳答案

这个问题可以使用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

关于image-processing - 如何从文本图像中删除虚线带?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49317116/

相关文章:

java - ImageJ API : Usage of Filter in my own Code

image-processing - 检测旋转的车辆图像

c# - 如何使用 emgucv/opencv/Aforge.Net/Accord.Net 在 50-100 毫秒内实时检测仪表中的指示灯和状态(ON-OFF、颜色、闪烁)

python - 如何使用 Imagemagick 或 PIL 绘制高质量的图像描边(边框)?

image-processing - 使图像中的文本更薄以用于 OCR

php - Laravel 图片库逻辑

java - 如何创建 jmagick 应用程序

php - 在 imagick php 中使用 svg 原始数据生成 SVG 图像

vb.net - 初始化 Emgu.CV 时出现异常

java - 如何找到所有基于图像的 PDF?