Python opencv从验证码中删除噪音

Dmi*_*try 2 python captcha opencv image-processing

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

我使用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)
Run Code Online (Sandbox Code Playgroud)

Sal*_*man 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

在此输入图像描述 在此输入图像描述