python中验证码连通域分割的方法详解

这篇文章主要给大家介绍了关于python中验证码连通域分割的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

实现思路

是用深度遍历,对图片进行二值化处理,先找到一个黑色像素,然后对这个像素的周围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://www.cnblogs.com/amengduo/p/9586243.html

python中验证码连通域分割的方法详解相关推荐

  1. python 连通域_python中验证码连通域分割的方法详解

    实现思路 是用深度遍历,对图片进行二值化处理,先找到一个黑色像素,然后对这个像素的周围8个像素进行判断,如果没有访问过,就保存起来,然后最后这个数组的最小x和最大x就是x轴上的切割位置.这种分割的方法 ...

  2. Python精讲:在Python中遍历字典的三大方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中遍历字典的三大方法详解>.本知识点主要内容有:使用字典对象的items()方法可以遍历字典的项和字典的&qu ...

  3. 『 迷你教程 』Python中的函数式编程全方法详解

    Python 是一种很棒的编程语言,是开发机器学习或数据科学应用程序的首选.Python 也很有趣,因为是一种多范式编程语言,可用于面向对象和命令式编程.具有简单的语法,易于阅读和理解. 在计算机科学 ...

  4. python中random函数的使用方法 详解

    # random各种使用方法 import random# 随机生成[0.1)的浮点数 print("random():", random.random())# 随机生成1000- ...

  5. python中update是啥意思,python中update的基本使用方法详解

    前言 Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法格式 d.update(e) 参数说明 将e中键-值对添加到字典 ...

  6. python支持向量机回归_Python中支持向量机SVM的使用方法详解

    除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...

  7. python中update是啥意思_python中update的基本使用方法详解

    前言 Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法格式 d.update(e) 参数说明 将e中键-值对添加到字典 ...

  8. python怎么横着输出_对python3中, print横向输出的方法详解

    对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...

  9. python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)

    连接数据库基本操作,我把每一步的操作是为什么给大家注释一下,老手自行快进. 请注意这是连接数据库操作,还不是更新. import pymysql #导包 #连接数据库 db = pymysql.con ...

最新文章

  1. javascript获取和设置URL中的参数
  2. 起底车载互联市场:产业市场庞大,但产品鱼龙混杂
  3. 通过lseek产生空洞文件
  4. 目标检测迁移学习_使用迁移学习检测疟疾
  5. IP地址 子网掩码 网关
  6. 大数据有哪些分析误区
  7. wpbakery Visual Composer - web网页可视化 编辑器 介紹
  8. 全面解析Kmeans聚类算法(Python)
  9. [从源码学设计]蚂蚁金服SOFARegistry之服务上线
  10. antd-design库iconfont字体本地化
  11. Cocos--开启物理
  12. postgresql集群方案hot standby初级测试(四)——xlog详细解释header
  13. python中从键盘输入的代码_Python中如何获取键盘输入
  14. 阿里10年:一个普通技术人的成长之路
  15. GLES2.0中文API-glBindAttribLocation
  16. 手机账本软件哪些可以实现随手记录
  17. c语言中0x12是什么进制,C语言中进制知识汇总
  18. 利用Arduino uno控制24BYJ-48电机正反转停止( 不使用步进库实现方法二)
  19. 计算机网络04之流量控制
  20. C++重载重写和多态区别

热门文章

  1. Android 性能优化:使用 Lint 优化代码、去除多余资源,减少APP的size
  2. oracle 转成 mysql_oracle转mysql总结(转)
  3. mysql ddl备份_MySQL 常用DDL执行方式总结
  4. web 服务器被配置为不列出此目录的内容。_三级网络技术考前选择题12—WWW服务器...
  5. 【java】java 多线程 异步计算 FutureTask 源码详解
  6. 【Flink】Flink jvm参数配置GC日志
  7. 【Flink】Flink 模拟 kafka 消费重启后 能接着读取 保存状态信息
  8. 【mac】iTerm2中ssh保持连接不断开
  9. 【Spark】Spark Stream读取kafka写入kafka报错 AbstractMethodError
  10. 【kafka】JMX 监控kafka kafka rmi NoSuchObjectException no such object in table