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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
Python实现自动发送邮件功能
Mar 02 Python
Python3实现发送QQ邮件功能(html)
Dec 15 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
python实现定时发送qq消息
Jan 18 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
python模拟点击网页按钮实现方法
Feb 25 Python
python3 实现口罩抽签的功能
Mar 11 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
python分析nignx访问日志脚本分享
2015/02/26 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
浅谈django 重载str 方法
2020/05/19 Python
keras 多任务多loss实例
2020/06/22 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
JVM是一个编译程序还是解释程序
2012/09/11 面试题
什么是抽象
2015/12/13 面试题
外贸公司实习自我鉴定
2013/09/24 职场文书
syb养殖创业计划书
2014/01/09 职场文书
自我鉴定写作要点
2014/01/17 职场文书
创建青年文明号材料
2014/05/09 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB