如何去噪图像

时间:2019-10-07 06:20:54

标签: python opencv ocr

我正在构建一个识别某些图片的应用程序。下面是示例: enter image description here

下面是我用来转换图片的代码:

img = cv2.imread('9jxs.png', 0)
ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
ret2, th2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
plt.figure()
plt.subplot(221), plt.imshow(img, 'gray')
plt.show()

很明显,图片的结果是“ 9JXS”,我的问题是如何删除噪点像素,清理图片,然后可以使用OCR组件进行识别

2 个答案:

答案 0 :(得分:1)

对于这种特定类型的图片,与其余图片相比,线条看起来要暗得多。我会找到图片的min(),并用平均值或更好的邻居中间值替换所有落在最小值最小值10%之内的像素。

答案 1 :(得分:0)

恐怕没有简单的解决方案可以解决这个问题,否则capchas就没用了。 您可以尝试手动调整范围选择的参数并结合一些侵蚀,但是对于一般情况,我想这很难实现自动化。

import cv2 as cv
import numpy as np

def on_lb_trackbar(val):
    global lb
    lb = val
    cv.imshow(title, cv.erode(cv.inRange(img,lb,ub),erosion_kernel))

def on_ub_trackbar(val):
    global ub
    ub = val
    cv.imshow(title, cv.erode(cv.inRange(img,lb,ub),erosion_kernel))

img = cv.imread(r'udilN.png',cv.IMREAD_GRAYSCALE)

lb = 0
ub = 255
title = 'Range selection'
erosion_kernel = np.ones((5,3), np.uint8)

cv.namedWindow(title)
cv.createTrackbar('from', title , lb, 255, on_lb_trackbar)
cv.createTrackbar('to', title , ub, 255, on_ub_trackbar)

on_lb_trackbar(0)

enter image description here