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编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
给Python IDLE加上自动补全和历史功能
Nov 30 Python
python从网络读取图片并直接进行处理的方法
May 22 Python
Python 内置函数complex详解
Oct 23 Python
Python利用flask sqlalchemy实现分页效果
Aug 02 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 Python
python ddt实现数据驱动
Mar 14 Python
pymongo中group by的操作方法教程
Mar 22 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
Scrapy框架基本命令与settings.py设置
Feb 06 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 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 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
php数据库备份还原类分享
2014/03/20 PHP
smarty实现多级分类的方法
2014/12/05 PHP
php猜单词游戏
2015/09/29 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
微信小程序select下拉框实现源码
2019/11/08 Javascript
python实现决策树ID3算法的示例代码
2018/05/30 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
医学生个人求职信范文
2014/02/07 职场文书
政府门卫岗位职责
2014/04/29 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
计划生育目标责任书
2015/05/09 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书