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统计文件行数示例分享
Feb 21 Python
python操作xml文件示例
Apr 07 Python
django2 快速安装指南分享
Jan 05 Python
Python遍历pandas数据方法总结
Feb 09 Python
Python生成短uuid的方法实例详解
May 29 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
tensorflow 限制显存大小的实现
Feb 03 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 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/06 新手入门
PHP 基本语法格式
2009/12/15 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
easyui validatebox验证
2016/04/29 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
Python实现简单拆分PDF文件的方法
2015/07/30 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
python使用matplotlib绘制折线图教程
2017/02/08 Python
Python深度优先算法生成迷宫
2018/01/22 Python
python如何让类支持比较运算
2018/03/20 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
师生聚会感言
2014/01/26 职场文书
节能标语大全
2014/06/21 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
纪委立案决定书
2015/06/24 职场文书
会议室管理制度范本
2015/08/06 职场文书