Python opencv从验证码中去除噪声
我需要自动解析captcha以从站点获取公共数据 我使用python和opencv。我是解决图像处理的新手。搜索之后,作为解决验证码的方法,我想出了下一个。由于Captha中的文本使用了一组相关颜色,我尝试使用HSV格式和遮罩,然后将图像转换为灰度,并使用阈值(自适应阈值平均值)从图像中去除噪声 但是,这还不足以消除噪声,并通过OCR(Tesseract)提供自动文本识别。见下图 我的解决方案中是否有改进的地方,或者有更好的方法 原始图像: 已处理图像: 代码:Python opencv从验证码中去除噪声,python,opencv,image-processing,captcha,Python,Opencv,Image Processing,Captcha,我需要自动解析captcha以从站点获取公共数据 我使用python和opencv。我是解决图像处理的新手。搜索之后,作为解决验证码的方法,我想出了下一个。由于Captha中的文本使用了一组相关颜色,我尝试使用HSV格式和遮罩,然后将图像转换为灰度,并使用阈值(自适应阈值平均值)从图像中去除噪声 但是,这还不足以消除噪声,并通过OCR(Tesseract)提供自动文本识别。见下图 我的解决方案中是否有改进的地方,或者有更好的方法 原始图像: 已处理图像: 代码: 我认为,通过应用一些平滑
我认为,通过应用一些平滑方法,然后找到图像边缘,可以获得良好的性能。 代码如下:
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)
您可以尝试不同的方法来实现您的目标: 可以通过应用中值滤波器(r=2)处理第一幅图像,然后进行自适应阈值处理: 打开的二进制选项是另一个可以尝试的选项: 请注意,质量低于第一种方法(尤其是最后一种方法明显降低) 第二张图像对处理的响应与第一张图像不同: 对于中间值法: 开幕式: 但是,可以通过应用中值模糊(r=1)提取文本,然后进行自动对比,然后使用50:
正如您所看到的,可以提高图像的质量,使其足够容易识别。第一幅图像可以毫无问题地转换为文本,但第二幅图像只能部分识别。如果增加阈值会怎么样?看起来文本的亮度大于周围的噪音。这里的问题是,一个适用于一个图像的设置不一定适用于另一个图像。您必须不断更改不同图像的值,这不太实际。这就是使用captcha的全部意义。我认为你应该收集更多带有captcha符号标签的captcha图像,并将其提供给深度学习以解决此任务,我来自KZ,我知道此captcha挂在哪里:)Dmitry,我的朋友也告诉我关于此网站的移动应用程序,你希望自动获取公共数据,在手机版本中,captcha不会挂起),它肯定会增强角色的可视性,但是你试过OCR吗?我想你可以用一些函数来填充检测到的边缘的内部,比如
cv2。泛光填充之后你可以把它传递给你的OCR函数。或者你也可以用检测到的边缘来掩盖你的图像。这确实是个好主意。蒙版后,只留下字符。小心,如果不是一个闭合轮廓(不是!),则泛洪填充将淹没所有内容。
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)