【问题标题】:How to remove background noise in image without damaging text?如何在不损坏文本的情况下去除图像中的背景噪音?
【发布时间】:2019-12-06 01:04:38
【问题描述】:

我正在为 tesseract 的 ocr 处理图像。我需要在不损坏文本的情况下消除背景噪音的帮助。

输入图像示例

我尝试过中值模糊和删除小的连接组件 (How do I remove the dots / noise without damaging the text?)。连接组件的问题是噪声可能有更大的连接,如果不删除减号,我就无法摆脱它。有什么建议如何前进吗?

【问题讨论】:

  • 您可以尝试应用开放形态变换:腐蚀后膨胀,使用中间行为 1,顶部和底部为 0 的内核(不会删除减号,因为变换是“水平应用”)。阅读:opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/…
  • 尝试不同的内核大小。例如 5x5、7x7、9x9
  • 感谢您的快速回复!我找到了一种使用腐蚀然后删除小的连接组件的方法

标签: python image opencv image-processing tesseract


【解决方案1】:

由于您的图像只有黑白,您可以进行简单的阈值处理和morphological transformations 来过滤图像。如果您的图像输入不是黑白的,您可以使用诸如cv2.medianBlur()cv2.GaussianBlur() 之类的模糊技术来平滑图像作为预处理步骤。然后您可以使用各种内核大小执行形态学操作或使用cv2.getStructuringElement() 构建自定义内核。通常,与较小的内核(3x35x5)相比,较大的内核大小(7x79x9)会去除更多噪声,但也会删除所需的细节。在平衡要保留的细节数量的同时,需要根据您想要去除多少噪音进行权衡。查看this 彩色验证码的答案。


阈值

变形关闭

为 Tesseract 反转图像

结果

-63 164

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

image = cv2.imread('1.png',0)
thresh = cv2.threshold(image, 150, 255, cv2.THRESH_BINARY_INV)[1]

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)

result = 255 - opening
cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('result', result)

print(pytesseract.image_to_string(result))
cv2.waitKey()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2015-09-16
    • 2017-03-19
    相关资源
    最近更新 更多