python实现验证码的非连接字符的分割算法
来源:互联网 发布:中学生网络文明公约 编辑:程序博客网 时间:2024/05/16 14:26
最近在抓取某网站时候,遇到了验证码的问题,想要破解一下验证码,示例验证码如下
这种验证码位置不固定,并且有倾斜,垂直投影会有交叉的部分,所以不适合用垂直切割的办法,受图像处理中洪水算法的启发,想到一种思路
洪水算法 参见 http://blog.csdn.net/Trent1985/article/details/44904431
常见实现办法有递归,扫描线算法等,本文针对的验证码不适合用扫描线算法,遂用递归实现
以下是核心代码:
import numpy as npimport cv2from PIL import Imagedef getPoint(x,y,data,subdata=None): a=[0,-1,0,1,0,-2,0,2,0,-3,0,3,0,-4,0,4,0,-5,0,5] b=[1,0,-1,0,2,0,-2,0,3,0,-3,0,4,0,-4,0,5,0,-5,0] width,height=data.shape if subdata is None: subdata=[] if x>5 and y<height-5 and y>5 and x<width-5: for i in range(20): if data[x+a[i]][y+b[i]]==1: subdata.append((x+a[i],y+b[i])) data[x+a[i]][y+b[i]]=2 getPoint(x+a[i],y+b[i],data,subdata) subdata.append((x,y))def getcell(data): list1=[] index=0 flag=True for y in range(data.shape[1]): for x in range(data.shape[0]): if data[x][y]==1: if list1: for i in range(len(list1)): if (x,y) in list1[i]: flag=False if not flag: continue list1.append([]) getPoint(x,y,data,list1[index])#调用流水算法 index+=1 else : continue for index in range(len(list1)): l=list1[index][0][0] t=list1[index][0][1] r=list1[index][0][0] b=list1[index][0][1] for i in list1[index]: x=i[0] y=i[1] l=min(l,x) t=min(t,y) r=max(r,x) b=max(b,y) w=r-l+1 h=b-t+1 if (w*h <8):#去除小色块 continue img0=np.zeros([w,h])#创建全0矩阵 for x,y in list1[index]: img0[x-l][y-t]=1 img0[img0<1]=255 img1=Image.fromarray(img0) img1=img1.convert('RGB') img1.save('img2/'+str(index)+'.png')
以上是我个人实现的解决方案,虽然算不上最优,但基本能够满足需求
有不足之处欢迎指出,也欢迎提出更优的解决方案
阅读全文
0 0
- python实现验证码的非连接字符的分割算法
- Python中split分割字符的使用
- Python实现PDF字符分割
- 分水岭分割算法的实现
- 【python】list的字符串连接和分割
- 简单实现字符的验证
- 非局部均值滤波算法的python实现
- 字符的分割函数
- 字符分割的基础
- 字符窜的分割
- 整数的所有不同分割数目--非递归算法
- 描述符分割的算法实现
- SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
- 验证码之字符分割&GUI显示
- Python实现的验证码识别
- iOS 分割输入验证码的视觉效果
- 优先连接算法的多种实现(Python)
- C#实现多个字符分割字符串的方法
- Android Studio鼠标悬停时显示代码文档
- Spring里遇到的一个问题,autowired时报找不到bean定义
- android 判断摄像头 能用不
- 一位志在“为天地立心,开万世之太平”的21岁女孩INFJ自我提升烦恼
- java.util.Collection包下各个类的特点汇总
- python实现验证码的非连接字符的分割算法
- 伪知识之了解数据库中回滚操作的含义持续更新:【内向即失败--王奕君】
- Eclipse 连接SQLServer数据库
- Android NDK + adb调试
- ionic——侧拉
- unix系列系统镜像下载
- 逻辑英语——动词和分词-----名词
- 16周---期末总结
- Query和Path的区别