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中 ? : 三元表达式的使用介绍
Oct 09 Python
python读取csv文件示例(python操作csv)
Mar 11 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
Python对列表中的各项进行关联详解
Aug 15 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
python实现画循环圆
Nov 23 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
python 30行代码实现蚂蚁森林自动偷能量
Feb 08 Python
基于Python编写一个监控CPU的应用系统
Jun 25 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自定义函数截取汉字长度
2014/05/15 PHP
linux下安装php的memcached客户端
2014/08/03 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
github配置使用指南
2014/11/18 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python可变参数用法实例分析
2017/04/02 Python
Python实现读取并保存文件的类
2017/05/11 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
使用Python实现分别输出每个数组
2019/12/06 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
一份全面的PHP面试问题考卷
2012/07/15 面试题
php优化查询foreach代码实例讲解
2021/03/24 PHP
部队学习十八大感言
2014/01/11 职场文书
旷课检讨书大全
2014/01/21 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
二审答辩状范文
2015/05/22 职场文书
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript