验证码识别(最简单之印刷体数字)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证码识别(最简单之印刷体数字)相关的知识,希望对你有一定的参考价值。
# -*- coding: utf-8 -*- import numpy from PIL import Image image = Image.open("5.gif") heigh = image.size[0] weigh = image.size[1] checkbox = ([-1,0],[0,1],[1,0],[0,-1]) #降噪除去一个点 def clearpoint(im): for i in range(heigh): for j in range(weigh): if im.getpixel((i,j))==0: result = 0 for count in range(4): if im.getpixel((i+checkbox[count][0],j+checkbox[count][1])):result+=1 if result == 4: im.putpixel((i,j),255) return im box = numpy.array([0,0,13,20]) imagenumsit = [] #chun cun 5 ge shuzi imagenumbit = [] imagedoublevalue = image.convert("1") imagedoublevalue = clearpoint(imagedoublevalue) resultnum = 0 for i in range(5): imagenum = imagedoublevalue.crop(box) imagenumsit.append(imagenum) box[0]=box[2] box[2]+=9 for i in range(5): w = imagenumsit[i].size[0] h = imagenumsit[i].size[1] vector = [0]*w imagenumbitsingle = numpy.tile(vector,(h,1)) for x in range(h): for y in range(w): if imagenumsit[i].getpixel((y,x)) == 0:imagenumbitsingle[x][y]=1 imagenumbit.append(imagenumbitsingle) imagenumsit[1].show() print imagenumbit[1]
代码用来分隔图像并且把图像二值化,分别保存。
python代码实现记录:
- 对Pillow库的使用,基本图像操作。
- image.size[0]表示图像的像素高度,类似于矩阵的表示方式,image.size[1]为图像的长度。
- image.getpixel((i,j)) ,对于图像(i,j)坐标的像素取颜色值,因为这里已经做过二值化,所以黑色值为0,白色值为255,降噪函数用搜索,把单独(周围都是白色像素点)黑色像素点去除掉
- image.convert(),用于转换RGB图像,PIL中所有格式的图像open()后都是RGB图像或者L图像(灰度图),共可以转化为九种模式图像:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F
- “1”:二值化图像,非黑即白,0表示黑,255表示白
- “L”:灰度图像,0-255表示不同灰度,转换公式:L=R * 299/1000 + G * 587/1000+ B * 114/1000
- “P”:8bit彩色图像
- “RGBA”:32bit彩色图像,其中24bit通道表示红绿蓝,剩下8bit表示透明度(alpha),alpha默认值:255(完全不透明)
- “CMYK”:32bit彩色图像,其中多出8bit来表示黑色油墨度,四种标准颜色是:C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’M:Magenta = 品红色,又称为‘洋红色’;Y:Yellow = 黄色;K:Key Plate(blacK) = 定位套版色(黑色),K默认值:0
- “YCbCr”:24bit彩色图像:Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量,转换公式Y= 0.257*R+0.504*G+0.098*B+16;Cb = -0.148*R-0.291*G+0.439*B+128;Cr = 0.439*R-0.368*G-0.071*B+128,
- “I”:32bit灰度图像,其中每个像素用0-255色度表示,转换公式:I = R * 299/1000 + G * 587/1000 + B * 114/1000
- “F”:32bit浮点灰度图像,其中每个像素用0-255色度表示,转换公式:F = R * 299/1000+ G * 587/1000 + B * 114/1000
以上是关于验证码识别(最简单之印刷体数字)的主要内容,如果未能解决你的问题,请参考以下文章
验证码识别与生成类API调用的代码示例合集:六位图片验证码生成四位图片验证码生成简单验证码识别等