我正在为tesseract的ocr处理图像。我需要帮助以消除背景噪音而又不会损坏文本。
我尝试了中值模糊并删除了小的连接组件(How do I remove the dots / noise without damaging the text?)。连接的组件的问题在于,噪声可能具有较大的连接,而如果不去除减号也无法消除噪声。有什么建议前进吗?
答案 0 :(得分:3)
由于图像仅是黑白图像,因此可以执行简单的阈值处理和morphological transformations来过滤图像。如果您的图像输入不是黑白图像,则可以使用诸如cv2.medianBlur()
或cv2.GaussianBlur()
之类的模糊技术来平滑图像,作为预处理步骤。然后,您可以执行各种内核大小的形态运算,或使用cv2.getStructuringElement()
构建自定义内核。通常,与较小的内核(7x7
或9x9
相比,较大的内核大小(3x3
或5x5
)会消除更多的噪音,但也会删除所需的细节。在权衡要保留的细节数量的同时,要权衡取舍。看看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()