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中的正则表达式的用法
Apr 09 Python
Django入门使用示例
Dec 12 Python
python图片二值化提高识别率代码实例
Aug 24 Python
如何利用python给图片添加半透明水印
Sep 06 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
为什么黑客都用python(123个黑客必备的Python工具)
Jan 31 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
python selenium操作cookie的实现
Mar 18 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 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 Pear 安装及使用
2009/03/19 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
jquery parent和parents的区别分析
2013/10/02 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
原生javascript如何实现共享onload事件
2020/07/03 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
Python如何解除一个装饰器
2020/08/07 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
财务部岗位职责
2013/11/19 职场文书
安全标准化汇报材料
2014/02/03 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
化工操作工岗位职责
2014/04/29 职场文书
活动总结怎么写啊
2014/05/07 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
大学迎新生标语
2014/10/06 职场文书
学习十八大标语
2014/10/09 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书