Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python opencv从验证码中去除噪声_Python_Opencv_Image Processing_Captcha - Fatal编程技术网

Python opencv从验证码中去除噪声

Python opencv从验证码中去除噪声,python,opencv,image-processing,captcha,Python,Opencv,Image Processing,Captcha,我需要自动解析captcha以从站点获取公共数据 我使用python和opencv。我是解决图像处理的新手。搜索之后,作为解决验证码的方法,我想出了下一个。由于Captha中的文本使用了一组相关颜色,我尝试使用HSV格式和遮罩,然后将图像转换为灰度,并使用阈值(自适应阈值平均值)从图像中去除噪声 但是,这还不足以消除噪声,并通过OCR(Tesseract)提供自动文本识别。见下图 我的解决方案中是否有改进的地方,或者有更好的方法 原始图像: 已处理图像: 代码: 我认为,通过应用一些平滑

我需要自动解析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)