目录

认识验证码

Python图片处理库

图片的要素

图形验证码


认识验证码

验证码是用于区分计算机和人为操作的图灵测试,其类别有以下几种:

图形验证码:由计算机随机生成的一个字符串,通过给字符串增加噪点、干扰线、变色、变形、重叠和扭曲等组成一张图片来增加识别的难度。

滑动验证码:也叫行为验证,滑动验证是通过记录用户在滑动时的滑动速度、每小段的瞬时速度、用户鼠标点击行为和滑动后的匹配程度进行识别是人为操作还是机器操作。

点触验证码:给出一张包含文字的图片,通过文字提示用户在图中点击正确的文字位置进行验证。

Python图片处理库

图片处理库PIL(Python Image Library),现只支持到python2.7,对于python3就需要使用pillow库(一个建立在PIL库的分支库,pillow库继承了PIL的方法并拓展)。

在使用的过程中,对于PIL和pillow库不能同时共存在一个环境中,由于后者是直接建立在前者的基础上,所以使用的时候会产生冲突,在使用的如果同时存在这两个库的时候,需要卸载掉PIL库

注意:导入使用pillow的时候通过导入PIL导入,导入后的库就是pillow库,这就是为什么两者不能共存的原因

图片的要素

尺寸大小(size)

通过图片对象的size属性获取,返回的是一个元组,元组中的两个值分别表示图片的水平的和垂直方向上的像素个数,这里的尺寸大小也是以像素为单位。

坐标系统

图片的坐标表示图片所占矩形区域的坐标位置,以矩形的左上顶点为原点(0,0),垂直为y轴(向下为正方向)和水平为X轴(向右为正方向),如果一个像素为300*500像素的图片,其坐标系统的值为(0,0,300,500),前两位表示左上点的坐标,后两位表示右下点的坐标。

通道

图片均是由一个或者多个数据通道构成。RGB图像是由三个数据通道(R 、G 、B)叠加构成;PNG图像有RGBA(A代表透明度)四个通道;对于灰度图像(没有色彩的图片,RGB色彩分量全部相等),只有一个通道。灰度指的是黑白图像中点的颜色深度,范围是0到255, 白色为255,黑色为0

图形验证码

灰度化—》二值化—》降噪—》识别

前三步处理详细代码:python—图像处理

灰度化

对于图片,每一个像素点的颜色值就是一个灰度值(范围在0—255,0为黑,255为白),灰度值是指颜色的浓淡程度。因为图片中的灰度不同,在处图像处理的时候不方便机器知道哪些是需要去识别的,哪些不需要,所以通过灰度化作为图片的预处理,为后面的二值化做准备。灰度化的图片就像黑白照,没有其他彩色。

二值化

二值化是将图像中的像素点矩阵中的每一个像素点设置为0或者255,从而使其呈现只有黑白两种明显的对比效果。二值化的原理是利用设定的某个阈值来判断图像像素是0或是255,大于阈值的统一变为255,小于阈值的统一变为0,临界的灰度值就是阈值。(使用阈值的原则:尽可能保留图片的信息又要最大程度的减少背景和噪点的干扰)

阈值的选择方法:

灰度平均值法:去127(即0~255的中间数)

像素平均值法:计算图像中所有像素的灰度平均值

降噪

图像的降噪有很多种,如高斯滤波、统计中值滤波、双边滤波等,基于降噪的基本原理是对某一像素点单位像素范围内的所有像素点进行分析,得到的这个像素点是否是要保留图像范围内的对象,再进行二值化赋值。

降噪的原理图

python下载验证码图片 图片验证码 python_灰度

当作噪点处理的算法

文字说明:如图中所示,黄色为需要判断是否为降噪的像素点,通过判断其周围某个范围内与之像素值相同的其他点的占比决定这个点是否是降噪,如精度选择距离这个点N个像素单位内,有超过50%的点都和这个点的像素值不同就当作噪点处理。

求出所有经过二转化处理过的像素点的像素值的非噪点的数量:count  ,打开图片文件的 getpixel((i,j)) 方法求像素值

计算对应范围内50%的像素点和这个点相同比例:0.5*((N*2+1)**2-1)

比较count和0.5*((N*2+1)**2-1)的关系,如果前者大于后者说明是噪点,需要处理。至于是大于或者小于为噪点判断的依据,需要看统计的count是非噪点数还是噪点数。

识别

查看详细篇:图片文字识别(一)、图片文字识别(二)