python对验证码降噪的实现示例代码


Posted in Python onNovember 12, 2019

前言:

最近写爬虫会经常遇到一些验证码识别的问题,现如今的验证码已经是五花八门,刚开始的验证码就是简单的对生成的验证码图片进行一些干扰,但是随着计算机视觉库的 发展壮大,可以轻松解决简单的验证码识别问题,于是一些变态 的验证码就出来了,什么滑动验证码,当然这个也是比较好解决的,用python的selenium库就可以破解一些滑动验证码。可是还出现了一些语音类,点击类的验证码。爬虫与反爬的较量确实越来越精彩了,也挺有趣的!最终促进的是整个行业技术的发展与进步。

python对验证码降噪的实现示例代码

今天分享一个可以解决简单验证码识别的代码。

图片:

python对验证码降噪的实现示例代码

图像灰度化处理

import cv2 
import numpy as np
img = cv2.imread('./picture/1.jpg')

#将图片灰度化处理,降维,加权进行灰度化c
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('min_gray',gray)

cv2.waitKey(0)

cv2.destroyAllWindows()

效果:

python对验证码降噪的实现示例代码

图像二值化处理

t,gray2 = cv2.threshold(gray,220,255,cv2.THRESH_BINARY)
cv2.imshow('threshold',gray2)

cv2.waitKey(0)

cv2.destroyAllWindows()

效果:

python对验证码降噪的实现示例代码

8领域过滤

def remove_noise(img,k=4):
  
  img2 = img.copy()
  
#   img处理数据,k过滤条件
  w,h = img2.shape
  def get_neighbors(img3,r,c):
    count = 0
    for i in [r-1,r,r+1]:
      for j in [c-1,c,c+1]:
        if img3[i,j] > 10:#纯白色
          count+=1
    return count
#   两层for循环判断所有的点
  for x in range(w):
    for y in range(h):
      if x == 0 or y == 0 or x == w -1 or y == h -1:
        img2[x,y] = 255
      else:
        n = get_neighbors(img2,x,y)#获取邻居数量,纯白色的邻居
        if n > k:
          img2[x,y] = 255
  return img2
result = remove_noise(gray2)
cv2.imshow('8neighbors',result)

cv2.waitKey(0)

cv2.destroyAllWindows()

过滤后的效果:

python对验证码降噪的实现示例代码

代码整合:

import cv2 
import numpy as np
img = cv2.imread('./picture/1.jpg')

#将图片灰度化处理,降维,加权进行灰度化c
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
t,gray2 = cv2.threshold(gray,200,255,cv2.THRESH_BINARY)
cv2.imshow('threshold',gray2)
result = remove_noise(gray2)
cv2.imshow('8neighbors',result)

cv2.waitKey(0)

cv2.destroyAllWindows()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用SAX解析xml实例
Nov 21 Python
python实用代码片段收集贴
Jun 03 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
Python中Threading用法详解
Dec 27 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
Python urllib3软件包的使用说明
Nov 18 Python
python缺失值的解决方法总结
Jun 09 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 #Python
详解在python操作数据库中游标的使用方法
Nov 12 #Python
如何分离django中的媒体、静态文件和网页
Nov 12 #Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 #Python
Python实现元素等待代码实例
Nov 11 #Python
如何基于python生成list的所有的子集
Nov 11 #Python
使用django和vue进行数据交互的方法步骤
Nov 11 #Python
You might like
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
新闻内页-JS分页
2006/06/07 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
wxPython之解决闪烁的问题
2018/01/15 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
2014年施工员工作总结
2014/11/18 职场文书
简历自荐信范文
2015/03/09 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang