1. 程式人生 > >驗證碼識別(最簡單之印刷體數字)

驗證碼識別(最簡單之印刷體數字)

轉化 end double show ray app def 藍色 代碼實現

# -*- 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. “1”:二值化圖像,非黑即白,0表示黑,255表示白
  2. “L”:灰度圖像,0-255表示不同灰度,轉換公式:L=R * 299/1000 + G * 587/1000+ B * 114/1000
  3. “P”:8bit彩色圖像
  4. “RGBA”:32bit彩色圖像,其中24bit通道表示紅綠藍,剩下8bit表示透明度(alpha),alpha默認值:255(完全不透明)
  5. “CMYK”:32bit彩色圖像,其中多出8bit來表示黑色油墨度,四種標準顏色是:C:Cyan = 青色,又稱為‘天藍色’或是‘湛藍’M:Magenta = 品紅色,又稱為‘洋紅色’;Y:Yellow = 黃色;K:Key Plate(blacK) = 定位套版色(黑色),K默認值:0
  6. “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,
  7. “I”:32bit灰度圖像,其中每個像素用0-255色度表示,轉換公式:I = R * 299/1000 + G * 587/1000 + B * 114/1000
  8. “F”:32bit浮點灰度圖像,其中每個像素用0-255色度表示,轉換公式:F = R * 299/1000+ G * 587/1000 + B * 114/1000

驗證碼識別(最簡單之印刷體數字)