如何在不破坏文本的情况下消除图像中的噪点?

时间:2019-07-28 13:00:56

标签: python opencv

我正在为tesseract的ocr处理图像。我需要帮助以消除背景噪音而又不会损坏文本。

This is an example image

我尝试了中值模糊并删除了小的连接组件(How do I remove the dots / noise without damaging the text?)。连接的组件的问题在于,噪声可能具有较大的连接,而如果不去除减号也无法消除噪声。有什么建议前进吗?

1 个答案:

答案 0 :(得分:3)

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


阈值

enter image description here

关闭形态

enter image description here

为Tesseract反转图像

enter image description here

结果

  

-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()