我需要自动解决验证码以从网站获取公共数据。
我使用python和opencv。我是解决图像处理问题的新手。在搜索之后,作为解决验证码的方法我接下来想出了。由于Captha中的文本使用了一组相关颜色,我尝试使用HSV格式和掩码,然后将图像转换为灰度并使用阈值(Adaptive_THRESH_MEAN_C)从图像中去除噪声。
但这还不足以消除噪音并使用OCR(Tesseract)提供自动文本识别。见下图。
我的解决方案中有什么可以改进的,或者有更好的方法吗?
原始图片:
已处理的图片:
代码:
import cv2
import numpy as np
img = cv2.imread("1.jpeg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, (36, 0, 0), (70, 255,255)) #green
# mask = cv2.inRange(hsv, (0, 0, 0), (10, 255, 255))
# mask = cv2.inRange(hsv, (125, 0, 0), (135, 255,255))
img = cv2.bitwise_and(img, img, mask=mask)
img[np.where((img == [0,0,0]).all(axis = 2))] = [255,255,255]
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 15, 2)
cv2.imwrite("out.png", img)
答案 0 :(得分:5)
我认为你可以通过应用一些平滑方法并在找到图像边缘后达到良好的性能。 这是代码:
import cv2
img = cv2.imread("input.jpg")
# smoothing the image
img = cv2.medianBlur(img, 5)
#edge detection
edges = cv2.Canny(img, 100, 200)
cv2.imwrite('output.png', edges)
答案 1 :(得分:1)