Python opencv从验证码中删除噪音

时间:2018-05-08 06:30:54

标签: python opencv image-processing captcha

我需要自动解决验证码以从网站获取公共数据。

我使用python和opencv。我是解决图像处理问题的新手。在搜索之后,作为解决验证码的方法我接下来想出了。由于Captha中的文本使用了一组相关颜色,我尝试使用HSV格式和掩码,然后将图像转换为灰度并使用阈值(Adaptive_THRESH_MEAN_C)从图像中去除噪声。

但这还不足以消除噪音并使用OCR(Tesseract)提供自动文本识别。见下图。

我的解决方案中有什么可以改进的,或者有更好的方法吗?

原始图片:

captcha1 captcha2

已处理的图片:

captcha1 captcha2

代码:

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)

2 个答案:

答案 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)

enter image description here enter image description here

enter image description here enter image description here

答案 1 :(得分:1)

您可以尝试不同的方法来实现目标: 您的第一张图像可以通过应用中值滤波器(r = 2)进行处理,然后进行自适应阈值处理: Processed image with clear text

Opening的二元期权可以尝试另一种选择: Processed image with clear text. Text is of lower quality than in image one

请注意,质量低于第一种方法(尤其是最后一种G可见性降低)。

第二张图片对治疗的反应与第一张不同:

对于中位数方法:

enter image description here

开场时间:

Second image

然而,可以通过应用中值模糊(r = 1)提取文本,然后进行自动对比,然后用50进行阈值处理:

Image two with significantly reduced noise

正如您所看到的,可以提高图像的质量,足以让人识别。第一个图像可以毫无问题地转换为文本,但第二个图像只能部分识别。