python中验证码连通域分割的方法详解


Posted in Python onJune 04, 2018

实现思路

是用深度遍历,对图片进行二值化处理,先找到一个黑色像素,然后对这个像素的周围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://3water.com/article/141434.htm

Python 相关文章推荐
python实现读取命令行参数的方法
May 22 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
redis之django-redis的简单缓存使用
Jun 07 Python
python中的for循环
Sep 28 Python
用Python实现读写锁的示例代码
Nov 05 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 Python
tensorflow使用指定gpu的方法
Feb 04 Python
多个python文件调用logging模块报错误
Feb 12 Python
Python中内建模块collections如何使用
May 27 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
Python 正则模块详情
Nov 02 Python
python 匹配url中是否存在IP地址的方法
Jun 04 #Python
Python实现ping指定IP的示例
Jun 04 #Python
用Python3创建httpServer的简单方法
Jun 04 #Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 #Python
Python闭包执行时值的传递方式实例分析
Jun 04 #Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 #Python
python实现超简单的视频对象提取功能
Jun 04 #Python
You might like
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
使用PYTHON创建XML文档
2012/03/01 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
三星美国官网:Samsung美国
2017/02/06 全球购物
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
列车长先进事迹材料
2014/01/25 职场文书
外贸专业求职信
2014/03/09 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
2015年老干部工作总结
2015/04/23 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python