下面是我用来转换图片的代码:
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组件进行识别
答案 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)