二值化后创建可读单词
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 设置。
我正在使用带有 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 设置。