二值化后创建可读单词

时间:2016-07-19 07:09:10

标签: python opencv computer-vision tesseract

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

adaptiveThreshold方法:

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

源:

source

在adaptiveThreshold之后:

after adaptiveThreshold

我也尝试过侵蚀和扩张:

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

结果:

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

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

例如,您可以将高斯滤镜应用于原始图像

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乘5内核给出了这个例子的最佳结果

Binary image with Gaussian blur first

如果您不喜欢图片中的小点,可以进一步应用中值滤镜来移除它们

clean_img = cv.medianBlur(bin_img, 3)

你会得到

After median filter

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