python中验证码连通域分割的方法详解
python中验证码连通域分割的方法详解
这篇文章主要给大家介绍了关于python中验证码连通域分割的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
实现思路
是用深度遍历,对图片进行二值化处理,先找到一个黑色像素,然后对这个像素的周围8个像素进行判断,如果没有访问过,就保存起来,然后最后这个数组的最小x和最大x就是x轴上的切割位置。这种分割的方法还是只能适用于没有粘连的验证码,比垂直分割的好处是,可以处理位置比较奇怪的验证码。
示例代码
def cfs(img):
"""传入二值化后的图片进行连通域分割"""
pixdata = img.load()
w,h = img.size
visited = set()
q = queue.Queue()
offset = [(-1,-1),(0,-1),(1,-1),(-1,0),(1,0),(-1,1),(0,1),(1,1)]
cuts = []
for x in range(w):
for y in range(h):
x_axis = []
#y_axis = []
if pixdata[x,y] == 0 and (x,y) not in visited:
q.put((x,y))
visited.add((x,y))
while not q.empty():
x_p,y_p = q.get()
for x_offset,y_offset in offset:
x_c,y_c = x_p x_offset,y_p y_offset
if (x_c,y_c) in visited:
continue
visited.add((x_c,y_c))
try:
if pixdata[x_c,y_c] == 0:
q.put((x_c,y_c))
x_axis.append(x_c)
#y_axis.append(y_c)
except:
pass
if x_axis:
min_x,max_x = min(x_axis),max(x_axis)
if max_x - min_x > 3:
# 宽度小于3的认为是噪点,根据需要修改
cuts.append((min_x,max_x 1))
return cuts
def saveSmall(img, outDir, cuts):
w, h = img.size
pixdata = img.load()
for i, item in enumerate(cuts):
box = (item[0], 0, item[1], h)
img.crop(box).save(outDir str(i) ".png")
img = Image.open('out/51.png')
saveSmall(img, 'cfs/', cfs(img))
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值
转载于:https://www.cnblogs.com/amengduo/p/9586243.html
python中验证码连通域分割的方法详解相关推荐
- python 连通域_python中验证码连通域分割的方法详解
实现思路 是用深度遍历,对图片进行二值化处理,先找到一个黑色像素,然后对这个像素的周围8个像素进行判断,如果没有访问过,就保存起来,然后最后这个数组的最小x和最大x就是x轴上的切割位置.这种分割的方法 ...
- Python精讲:在Python中遍历字典的三大方法详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中遍历字典的三大方法详解>.本知识点主要内容有:使用字典对象的items()方法可以遍历字典的项和字典的&qu ...
- 『 迷你教程 』Python中的函数式编程全方法详解
Python 是一种很棒的编程语言,是开发机器学习或数据科学应用程序的首选.Python 也很有趣,因为是一种多范式编程语言,可用于面向对象和命令式编程.具有简单的语法,易于阅读和理解. 在计算机科学 ...
- python中random函数的使用方法 详解
# random各种使用方法 import random# 随机生成[0.1)的浮点数 print("random():", random.random())# 随机生成1000- ...
- python中update是啥意思,python中update的基本使用方法详解
前言 Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法格式 d.update(e) 参数说明 将e中键-值对添加到字典 ...
- python支持向量机回归_Python中支持向量机SVM的使用方法详解
除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...
- python中update是啥意思_python中update的基本使用方法详解
前言 Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法格式 d.update(e) 参数说明 将e中键-值对添加到字典 ...
- python怎么横着输出_对python3中, print横向输出的方法详解
对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...
- python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)
连接数据库基本操作,我把每一步的操作是为什么给大家注释一下,老手自行快进. 请注意这是连接数据库操作,还不是更新. import pymysql #导包 #连接数据库 db = pymysql.con ...
最新文章
- javascript获取和设置URL中的参数
- 起底车载互联市场:产业市场庞大,但产品鱼龙混杂
- 通过lseek产生空洞文件
- 目标检测迁移学习_使用迁移学习检测疟疾
- IP地址 子网掩码 网关
- 大数据有哪些分析误区
- wpbakery Visual Composer - web网页可视化 编辑器 介紹
- 全面解析Kmeans聚类算法(Python)
- [从源码学设计]蚂蚁金服SOFARegistry之服务上线
- antd-design库iconfont字体本地化
- Cocos--开启物理
- postgresql集群方案hot standby初级测试(四)——xlog详细解释header
- python中从键盘输入的代码_Python中如何获取键盘输入
- 阿里10年:一个普通技术人的成长之路
- GLES2.0中文API-glBindAttribLocation
- 手机账本软件哪些可以实现随手记录
- c语言中0x12是什么进制,C语言中进制知识汇总
- 利用Arduino uno控制24BYJ-48电机正反转停止( 不使用步进库实现方法二)
- 计算机网络04之流量控制
- C++重载重写和多态区别
热门文章
- Android 性能优化:使用 Lint 优化代码、去除多余资源,减少APP的size
- oracle 转成 mysql_oracle转mysql总结(转)
- mysql ddl备份_MySQL 常用DDL执行方式总结
- web 服务器被配置为不列出此目录的内容。_三级网络技术考前选择题12—WWW服务器...
- 【java】java 多线程 异步计算 FutureTask 源码详解
- 【Flink】Flink jvm参数配置GC日志
- 【Flink】Flink 模拟 kafka 消费重启后 能接着读取 保存状态信息
- 【mac】iTerm2中ssh保持连接不断开
- 【Spark】Spark Stream读取kafka写入kafka报错 AbstractMethodError
- 【kafka】JMX 监控kafka kafka rmi NoSuchObjectException no such object in table