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 10 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
python通过tcp发送xml报文的方法
Dec 28 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
Mar 11 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
selenium如何定位span元素的实现
Jan 13 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
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
php DES加密算法实例分析
2019/09/18 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
babel基本使用详解
2017/02/17 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
python中正则表达式与模式匹配
2019/05/07 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
pytorch 模型可视化的例子
2019/08/17 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
Java如何格式化日期
2012/08/07 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
自我评价范文点评
2013/12/04 职场文书
公司董事长岗位职责
2014/06/08 职场文书
员工试用期自我评价
2014/09/18 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
老员工辞职信范文
2015/05/12 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
用Python可视化新冠疫情数据
2022/01/18 Python