python对验证码降噪的实现示例代码
作者:lemon * 发布时间:2021-01-02 09:54:17
标签:python,验证码,降噪
前言:
最近写爬虫会经常遇到一些验证码识别的问题,现如今的验证码已经是五花八门,刚开始的验证码就是简单的对生成的验证码图片进行一些干扰,但是随着计算机视觉库的 发展壮大,可以轻松解决简单的验证码识别问题,于是一些变态 的验证码就出来了,什么滑动验证码,当然这个也是比较好解决的,用python的selenium库就可以破解一些滑动验证码。可是还出现了一些语音类,点击类的验证码。爬虫与反爬的较量确实越来越精彩了,也挺有趣的!最终促进的是整个行业技术的发展与进步。
今天分享一个可以解决简单验证码识别的代码。
图片:
图像灰度化处理
import cv2
import numpy as np
img = cv2.imread('./picture/1.jpg')
#将图片灰度化处理,降维,加权进行灰度化c
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('min_gray',gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果:
图像二值化处理
t,gray2 = cv2.threshold(gray,220,255,cv2.THRESH_BINARY)
cv2.imshow('threshold',gray2)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果:
8领域过滤
def remove_noise(img,k=4):
img2 = img.copy()
# img处理数据,k过滤条件
w,h = img2.shape
def get_neighbors(img3,r,c):
count = 0
for i in [r-1,r,r+1]:
for j in [c-1,c,c+1]:
if img3[i,j] > 10:#纯白色
count+=1
return count
# 两层for循环判断所有的点
for x in range(w):
for y in range(h):
if x == 0 or y == 0 or x == w -1 or y == h -1:
img2[x,y] = 255
else:
n = get_neighbors(img2,x,y)#获取邻居数量,纯白色的邻居
if n > k:
img2[x,y] = 255
return img2
result = remove_noise(gray2)
cv2.imshow('8neighbors',result)
cv2.waitKey(0)
cv2.destroyAllWindows()
过滤后的效果:
代码整合:
import cv2
import numpy as np
img = cv2.imread('./picture/1.jpg')
#将图片灰度化处理,降维,加权进行灰度化c
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
t,gray2 = cv2.threshold(gray,200,255,cv2.THRESH_BINARY)
cv2.imshow('threshold',gray2)
result = remove_noise(gray2)
cv2.imshow('8neighbors',result)
cv2.waitKey(0)
cv2.destroyAllWindows()
来源:https://blog.csdn.net/weixin_43697214/article/details/103007015
0
投稿
猜你喜欢
- 管理SQL Server内在的帐户和密码时,我们很容易认为这一切都相当的安全。但实际上并非如此。在这里,我们列出了一些对于SQL Serve
- 做数据分析、科学计算等离不开工具、语言的使用,目前最流行的数据语言,无非是MATLAB,R语言,Python这三种语言,但今天小编简单总结了
- OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的
- 方法一:使用装饰器装饰器维护一个字典对象instances,缓存了所有单例类,只要单例不存在则创建,已经存在直接返回该实例对象。def si
- 一个假冒的序列号被用来注册Internet Download Manager。IDM正在退出...解决办法1.找到文件 C:\W
- 在我的上篇文章发出之后,我听到对“WEb2.0视觉风格”这个称谓的不认同声音。其实这并不出乎我的意料,因为,我在认真的开始思考“WEb2.0
- @property作用:python的@property是python的一种装饰器,是用来修饰方法的。我们可以使用@property装饰器来
- 正在看的ORACLE教程是:Oracle 数据表分区的策略。本文描述通过统计分析出医院信息系统需分区的表,对需分区的表选择分区键,即找出包括
- 说到客户端数据存储,可能第一时间想到的是cookies,这是一种网站常见的存储数据的方法。它的最大优点是兼容性好,几乎所有浏览器都具有这个功
- 在计算机编程中,数据类型是非常重要的一个概念。数据类型决定了计算机内部如何表示数据,以及在执行不同的操作时需要进行哪些转换。Go 语言作为一
- MAH一:MAH架构介绍MHA (Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由
- 或许现在关心交互设计的设计师们大部分来自于了互联网行业,所以我们看到当你搜索“交互设计”时更多的BLOG和文章是在谈论互联网,网站的导航,注
- 目录前置知识可迭代对象如何判断一个对象是否是可迭代对象?enumerate 函数多嵌套列表总结前置知识如果给定一个 list 或 tuple
- FileSystemObject、Folder 和 File 对象的一些方法都与通过 TextStream 对象创建、读取或写入文件有关。虽
- 直接调用系统的颜色显示在网页上本来是件很好玩滴事,但是,也有个缺点,就是可用的色太少 比如Bindows在它的启动画面一点点应用。=。= 上
- 听说firefox是史上最好用的浏览器,便下载下来体验一番,将体验感受与大家分享一下,并和我一直使用的the world浏览器做一个对比!首
- 功能:扫描当前目录下所有CSV文件并对其中文件进行统计,输出统计值到CSV文件pip install pandasimport pandas
- js 获取经纬度的实现方法<!-- copyright (c) 2009 Google inc. You are free to
- 前言数据清洗是一项复杂且繁琐(kubi)的工作,同时也是整个数据分析过程中最为重要的环节。有人说一个分析项目80%的时间都是在清洗数据,这听
- 实验室新装了keras,发现keras默认后端是tensorflow,想换回theano,看了官方文档也没搞懂,最终搞定,很简单。中文文档的