驗證碼識別(最簡單之印刷體數字)
阿新 • • 發佈:2017-11-27
轉化 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”:二值化圖像,非黑即白,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
驗證碼識別(最簡單之印刷體數字)