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中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
python按照多个字符对字符串进行分割的方法
Mar 17 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
django框架自定义用户表操作示例
Aug 07 Python
python 魔法函数实例及解析
Sep 25 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
Python  word实现读取及导出代码解析
Jul 09 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
Python实现数字的格式化输出
Aug 01 Python
python 模拟登陆163邮箱
Dec 15 Python
python中的装饰器该如何使用
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
Terran热键控制
2020/03/14 星际争霸
PHP4.04简明安装
2006/10/09 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
js中this对象用法分析
2018/01/05 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
详解vue 组件
2020/06/11 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
centos下更新Python版本的步骤
2013/02/12 Python
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python实现按行切分文本文件的方法
2016/04/18 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
演讲稿怎么写才完美
2014/01/02 职场文书
李强优秀员工观后感
2015/06/16 职场文书
百年校庆感言
2015/08/01 职场文书
初一英语教学反思
2016/02/15 职场文书