Python爬虫笔记【一】模拟用户访问之验证码清理(4)
清理图片,对图片进行二值化,去边框,去干扰线,去点
from PIL import Image from pytesseract import * from fnmatch import fnmatch from queue import Queue import matplotlib.pyplot as plt import cv2 import time import osdef clear_border(img,img_name):'''去除边框'''h, w = img.shape[:2]for y in range(0, w):for x in range(0, h):# if y ==0 or y == w -1 or y == w - 2:if y < 4 or y > w -4:img[x, y] = 255# if x == 0 or x == h - 1 or x == h - 2:if x < 4 or x > h - 4:img[x, y] = 255return imgdef interference_line(img, img_name):'''干扰线降噪'''h, w = img.shape[:2]# !!!opencv矩阵点是反的# img[1,2] 1:图片的高度,2:图片的宽度for r in range(0,2):for y in range(1, w - 1):for x in range(1, h - 1):count = 0if img[x, y - 1] > 245:count = count + 1if img[x, y + 1] > 245:count = count + 1if img[x - 1, y] > 245:count = count + 1if img[x + 1, y] > 245:count = count + 1if count > 2:img[x, y] = 255return imgdef interference_point(img,img_name, x = 0, y = 0):"""点降噪9邻域框,以当前点为中心的田字框,黑点个数:param x::param y::return:"""# todo 判断图片的长宽度下限cur_pixel = img[x,y]# 当前像素点的值height,width = img.shape[:2]for y in range(0, width - 1):for x in range(0, height - 1):if y == 0: # 第一行if x == 0: # 左上顶点,4邻域# 中心点旁边3个点sum = int(cur_pixel) \+ int(img[x, y + 1]) \+ int(img[x + 1, y]) \+ int(img[x + 1, y + 1])if sum <= 2 * 245:img[x, y] = 0elif x == height - 1: # 右上顶点sum = int(cur_pixel) \+ int(img[x, y + 1]) \+ int(img[x - 1, y]) \+ int(img[x - 1, y + 1])if sum <= 2 * 245:img[x, y] = 0else: # 最上非顶点,6邻域sum = int(img[x - 1, y]) \+ int(img[x - 1, y + 1]) \+ int(cur_pixel) \+ int(img[x, y + 1]) \+ int(img[x + 1, y]) \+ int(img[x + 1, y + 1])if sum <= 3 * 245:img[x, y] = 0elif y == width - 1: # 最下面一行if x == 0: # 左下顶点# 中心点旁边3个点sum = int(cur_pixel) \+ int(img[x + 1, y]) \+ int(img[x + 1, y - 1]) \+ int(img[x, y - 1])if sum <= 2 * 245:img[x, y] = 0elif x == height - 1: # 右下顶点sum = int(cur_pixel) \+ int(img[x, y - 1]) \+ int(img[x - 1, y]) \+ int(img[x - 1, y - 1])if sum <= 2 * 245:img[x, y] = 0else: # 最下非顶点,6邻域sum = int(cur_pixel) \+ int(img[x - 1, y]) \+ int(img[x + 1, y]) \+ int(img[x, y - 1]) \+ int(img[x - 1, y - 1]) \+ int(img[x + 1, y - 1])if sum <= 3 * 245:img[x, y] = 0else: # y不在边界if x == 0: # 左边非顶点sum = int(img[x, y - 1]) \+ int(cur_pixel) \+ int(img[x, y + 1]) \+ int(img[x + 1, y - 1]) \+ int(img[x + 1, y]) \+ int(img[x + 1, y + 1])if sum <= 3 * 245:img[x, y] = 0elif x == height - 1: # 右边非顶点sum = int(img[x, y - 1]) \+ int(cur_pixel) \+ int(img[x, y + 1]) \+ int(img[x - 1, y - 1]) \+ int(img[x - 1, y]) \+ int(img[x - 1, y + 1])if sum <= 3 * 245:img[x, y] = 0else: # 具备9领域条件的sum = int(img[x - 1, y - 1]) \+ int(img[x - 1, y]) \+ int(img[x - 1, y + 1]) \+ int(img[x, y - 1]) \+ int(cur_pixel) \+ int(img[x, y + 1]) \+ int(img[x + 1, y - 1]) \+ int(img[x + 1, y]) \+ int(img[x + 1, y + 1])if sum <= 4 * 245:img[x, y] = 0return imgdef _get_dynamic_binary_image(filedir,img_name):'''自适应阀值二值化'''filename = './easy_code/' + img_name.split('.')[0] + '-binary.jpg'img_name = filedir + '/' + img_nameim = cv2.imread(img_name)im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)th1 = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 21, 1)return th1def recognize(): filedir = './images' #验证码路径for file in os.listdir(filedir):if fnmatch(file, '*.jpg'):img_name = file# 自适应阈值二值化im = _get_dynamic_binary_image(filedir,img_name)# 去除边框im = clear_border(im,img_name)# 对图片进行干扰线降噪im = interference_line(im,img_name)# 对图片进行点降噪im = interference_point(im,img_name)filename = './easy_code/' + img_name.split('.')[0] + '-interferencePoint.jpg' #easy_code为保存路径cv2.imwrite(filename,im) #保存图片 recognize()
以上代码改自 老板丶鱼丸粗面 的 《python验证码识别》对于验证码识别大佬那还有跟详细的介绍。
附链接:https://www.cnblogs.com/qqandfqr/p/7866650.html
转载于:https://www.cnblogs.com/dfy-blog/p/11563331.html
Python爬虫笔记【一】模拟用户访问之验证码清理(4)相关推荐
- Python爬虫笔记(3)- 爬取丁香园留言
Python爬虫笔记(3)- 爬取丁香园留言 爬取丁香园留言:主要用到了模拟登录 爬取丁香园留言:主要用到了模拟登录 import requests, json, re, random,time fr ...
- python 模拟浏览器selenium_浅谈python爬虫使用Selenium模拟浏览器行为
前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...
- Python爬虫笔记
Python爬虫笔记 总体看过程 赋予地址 获取网页信息 获取网页中所需的信息 将得到所需的信息保存到硬盘 总体看过程 爬虫-从网络上爬取所需要的信息,怎么爬取?首先得知道你要去哪里获取(即地址,首先 ...
- Python 爬虫实战,模拟登陆爬取数据
Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...
- Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息
Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息 基础: Python 爬虫 之 Selenium.webdriver 的安装,以及模拟打开操作 ...
- python爬虫笔记第二章
前言 你好! 这是基于b站2021年路飞学成爬虫教程的python爬虫学习笔记,主要是方便作者复习和回顾课程内容. 已经发布了第一章和第二章,可以在主页中查看. python爬虫笔记(第二章) 前言 ...
- 利用python爬虫(part15)--cookie模拟登陆
学习笔记 文章目录 cookie模拟登陆 获取cookie 爬取我的简介 cookie模拟登陆 有的时候,我们想要抓取一个网站,但是需要先登录才能访问它,如果不输入用户名和密码,我们就会一直停留在登录 ...
- Python爬虫基础 爬取网页 访问网页
前段时间又被人问了会不会爬虫,然后感觉现在爬取数据好像还是挺有用的,所以就在网上找了课程学习了一下,利用Python对网站进行爬取和解析等等.原来使用过八爪鱼这个软件,不太需要有什么编程基础,但是也已 ...
- Python爬虫笔记——解析json数据(以周杰伦歌单为例)及Headers
一.Network Network能够记录浏览器的所有请求.我们最常用的是:ALL(查看全部)/XHR(仅查看XHR)/Doc(Document,第0个请求一般在这里),有时候也会看看:Img(仅查看 ...
- Python爬虫笔记汇总
文中介绍的比较详细的有,requests库,urllib.request库,BeautifulSoup库,re库和正则表达式,Scrapy常用命令. 一.requests库 课程小案例 京东商品详情页 ...
最新文章
- NSThread 多线程相关
- android存储器,Android——寄存器和存储器的区别
- java拼接字符串 判断内容_java--字符串拼接比较
- 【树链剖分】染色(luogu 2486/金牌导航 树链剖分-3)
- 用于检测敏感词的 PHP 扩展
- exists的用法 python_Python 办公自动化自动整理文件,一键完成!
- linux下的C语言开发(自动编译工具和config.h文件生成)
- hibernate 读取mysql表结构_为什么要用hibernate 与基于数据库表结构的项目开发
- kafka 同步提交 异步_Kafka 位移提交那些事儿
- (转载)Stackoverflow让我们变懒了?
- java jpa 字段 关联_jpa查询关联表懒加载数据initialize proxy no session
- 本特利探头177230-01-02-CN
- 服务器分类方式和类型
- MSP、CSP、BSP区别
- 力扣(LeetCode)244. 最短单词距离 II(2022.09.01)
- php实现短信找回密码,thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能...
- Spring boot再来一遍
- Anaconda更新报404:UnavailableInvalidChannel: The channel is not accessible or is invalid.error404
- We Dont Kown ....
- php new object delete,DeleteObject()函数
热门文章
- 跟着Code走,详解Symbian Client/Server架构
- 基于asp.net725原创(古代)文学交流网站系统
- 【WIN】超简单的Excel密码破解
- 游戏服务器更新文件,如何配置网吧游戏更新服务器
- 【Paper-Attack】Graph Universal Adversarial Attacks: A Few Bad Actors Ruin Graph Learning Models
- R语言:lengths计算列表list中元素的个数
- H5页面点击图片自动全屏代码
- 已有虚拟磁盘多个vmdk文件导入虚拟机
- Servlet判断用户是否登陆过、异地登录和登出功能
- vue3.x自定义换肤