二值化后创建可读单词

Create readable words after binarization

我正在使用带有 Python 的 opencv 来清理图像以便 tesseract 可读。我有一张黑白图像,经过自适应阈值处理后,它看起来不够好。有很多纸张噪音,字母也不是很干净。我该如何解决?

自适应阈值方法:

cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

来源:

自适应阈值之后:

我也试过腐蚀和膨胀:

kernel = np.ones((2,2), np.uint8)
e = cv2.erode(roi_sharpen, kernel, iterations=1))
d = cv2.dilate(roi_sharpen, kernel, iterations=1))

结果:

由于您注意到有很多噪点,尝试对图像进行一些平滑处理总是个好主意。

例如,您可以对原始图像应用高斯滤波器

smooth_img = cv.GaussianBlur(img, (5, 5), 0, 0)
bin_img = cv.adaptiveThreshold(smooth_img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 2)

我尝试了几种内核大小,似乎 5 x 5 内核在此示例中给出了最好的结果

如果您不喜欢图像中的小点,您可以进一步应用中值滤波器来去除它们

clean_img = cv.medianBlur(bin_img, 3)

你会得到

Tesseract 也有很多参数调整,如果您没有得到满意的结果,您可能想尝试一些不同的 Tesseract 设置。