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端口扫描系统实现方法
Nov 19 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
python如何使用代码运行助手
Jul 03 Python
Python中return函数返回值实例用法
Nov 19 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 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缓冲输出实例分析
2015/01/05 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
什么是servlet
2012/05/08 面试题
质检的岗位职责
2013/11/17 职场文书
加工操作管理制度
2014/01/19 职场文书
法人授权委托书格式
2014/04/08 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
2014年质量工作总结
2014/11/22 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
简爱电影观后感
2015/06/10 职场文书
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis