使用python公益诉讼库实现简单验证码的去噪方法步骤

  

字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的。

  

想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括:将彩色图片转换成灰度图,将灰度图二值化和去除噪点三个基本过程。这里仅以比较简单的验证码为例,介绍一下如何通过python的公益诉讼库对图片去噪。

  

首先看一下未经处理的验证码图片:

  

使用python公益诉讼库实现简单验证码的去噪方法步骤”> <br/>
  </p>
  <p>对图片处理主要使用了公益诉讼库的图像类。</p>
  <p> </p>
  <p>首先使用形象的开放的方法打开上面的图片,可以得到一个PIL.Image.Image对象,之后就可以调用转换,过滤器,点和putpixel等方法来处理图片。</p>
  <p>我们可以通过将方法将上面的彩色图片转换成灰度图:</p>
  
  <pre类=   #=utf8编码      从公益诉讼导入图像      def main ():   形象=Image.open (“RandomPicture.png”)   imgry=image.convert (L)   imgry.save (“gray.png”)      if __name__==癬_main__”:   main ()      

运行结果:

  

使用python公益诉讼库实现简单验证码的去噪方法步骤”> <br/>
  </p>
  <p>通过保存的图片可以看出来,已经由原来的彩图变成了灰度图,或者也可以认为是黑白图。什么叫灰度图?我们知道彩色图片是由不同的颜色的像素组合到一起的,那灰度图可以类似的认为是由不同灰度值的像素组合在一起后呈现出来的。任何颜色都有红,绿,蓝三原色组成,假如原来某点的颜色为RGB (R, G, B),那么,我们可以通过下面几种方法,将其转换为灰度:</p>
  <p> 1。浮点算法:灰色=R * 0.3 + G * 0.59 + B * 0.11 <br/>
  2 .整数方法:灰色=(R * 30 + G * 59 + B * 11)/100 <br/>
  3.移位方法:灰色=(R * 76 + G * 151 + B * 28)在祝辞8;<br/>
  4 .平均值法:灰色=(R + G + B)/3; <br/>
  5.仅取绿色:灰色=G; <br/>
  </p>
  <p>通过上述任一种方法求得灰色后,将原来的RGB (R, G, B)中的R, G, B统一用灰色替换,形成新的颜色RGB(灰色、灰色、灰色),用它替换原来的RGB (R, G, B)就是灰度图了。</p>
  <p>用代码实现看一下:</p>
  
  <pre类=   #=utf8编码      从公益诉讼导入图像      def main ():   形象=Image.open (“RandomPicture.png”)   打印的图像模式:image.mode   打印图像。获取像素((0,0))   打印”——“* 40   imgry=image.convert (L)   打印“imgry模式:”,imgry.mode   打印imgry。获取像素((0,0))      if __name__==癬_main__”:   main ()      

运行结果:

        图像模式:RGB   (21日,10日,26)   ----------------------------------------   L imgry模式:   15      

代码说明:

  

通过image.mode方法可以获得当前的PIL.Image.Image对象(也就是当前打开的图片)的模式值,而模式值表示图片的单位颜色是由RGB三个值组成的还是由灰度值组成的;

  

而获取像素可以获取某个像素的RGB值或者灰度值。我们知道图片是由许多像素组成的,每个像素在图片上都有一个对应的坐标x和y,而“(0,0)”就表示该图片左上角顶点的像素。

  

由上面的结果我们可以知道,在将图片转换成灰度图之前,“(0,0)“代表的像素的颜色是由RGB组成的:(26)21日10日;在通过音乐会将彩色图片转换成灰度后,“(0,0)“代表的像素的颜色值就变成了一个值:“15”,通过打印imgry.mode我们也可以知道,此时图片已经变成了灰度图,它的每一个像素的颜色都变成了一个灰度值。

  

其实这时候我们也可以简单的计算一下,使用前面说的浮点算法将上面的(26)21日10日三个值带入计算:

        在在在21 * 0.3 + 10 * 0.59 + 26 * 0.11   15.059999999999999      

结果显示确实由浮点算法将RGB值变成了灰度值。

  

  

我们已经得到了灰度图,接下来就是将灰度图二值化。所谓二值化就是将灰度图像转换成由黑白二色组成的图像。思路就是确定一个阈值,大于阈值的像素表示为白色,小于阈值的像素表示为黑色,以此将图片的像素(灰度值)划分为两部分:0和1,例如0代表黑色,1代表白色,然后我们就可以用一串0和1组成的数字来表示一张图片。

使用python公益诉讼库实现简单验证码的去噪方法步骤