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 相关文章推荐
wxpython中利用线程防止假死的实现方法
Aug 11 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
Linux下python3.6.1环境配置教程
Sep 26 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 Python
python中if和elif的区别介绍
Nov 07 Python
python实现局部图像放大
Nov 17 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 JSON中文乱码的解决方法详解
2013/06/06 PHP
PHP静态文件生成类实例
2014/11/29 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
python获取android设备的GPS信息脚本分享
2015/03/06 Python
python非递归全排列实现方法
2017/04/10 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
Python 绘制可视化折线图
2020/07/22 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
2015秋季开学典礼新闻稿
2015/07/17 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
详解JavaScript中Arguments对象用途
2021/08/30 Javascript