- #encoding=utf-8
- N={} #字模,用的是网上的,此代码取模位置有些不同,
- #但大致一样。
- N[0]=[
- 0,0,1,1,1,1,0,0,0,0,
- 0,1,1,1,1,1,1,0,0,0,
- 1,1,1,0,0,1,1,1,0,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,1,0,0,0,1,1,1,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,1,0,0,1,1,1,1,0,
- 1,1,1,0,0,1,1,1,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 0,1,1,1,1,1,0,0,0,0,]
- N[1]=[
- 0,0,1,1,1,0,0,0,0,0,
- 1,1,1,1,1,1,0,0,0,0,
- 1,1,1,1,1,1,0,0,0,0,
- 0,0,1,1,1,1,0,0,0,0,
- 0,0,0,1,1,1,0,0,0,0,
- 0,0,0,1,1,1,0,0,0,0,
- 0,0,0,1,1,1,0,0,0,0,
- 0,0,0,1,1,1,0,0,0,0,
- 0,0,0,1,1,1,0,0,0,0,
- 0,0,0,1,1,1,0,0,0,0,
- 0,0,1,1,1,1,1,1,0,0,
- 0,1,1,1,1,1,1,1,0,0,
- 0,1,1,1,1,1,1,1,0,0,]
- N[7]=[
- 1,1,1,1,1,1,1,1,0,0,
- 1,1,1,1,1,1,1,1,1,1,
- 0,0,0,0,0,1,1,1,1,0,
- 0,0,0,0,0,0,1,1,1,0,
- 0,0,0,0,0,1,1,1,0,0,
- 0,0,0,0,1,1,1,0,0,0,
- 0,0,0,1,1,1,0,0,0,0,
- 0,0,0,1,1,1,0,0,0,0,
- 0,0,0,1,1,0,0,0,0,0,
- 0,0,1,1,1,0,0,0,0,0,
- 0,0,1,1,1,0,0,0,0,0,
- 0,1,1,1,0,0,0,0,0,0,
- 0,1,1,1,0,0,0,0,0,0,]
- N[6]=[
- 0,1,1,1,1,1,1,0,0,0,
- 0,1,1,1,1,1,1,1,0,0,
- 1,1,1,1,0,1,1,0,0,0,
- 1,1,0,0,0,0,0,0,0,0,
- 1,1,1,0,0,0,0,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,1,0,0,
- 1,1,1,0,0,1,1,1,1,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,1,0,0,1,1,1,1,0,
- 0,1,1,1,1,1,1,1,0,0,
- 0,0,1,1,1,1,1,0,0,0,]
- N[3]=[
- 1,1,1,1,1,1,0,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,0,0,0,1,1,1,1,0,0,
- 0,0,0,0,0,1,1,1,0,0,
- 0,0,0,0,1,1,1,0,0,0,
- 1,1,1,1,1,1,0,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 0,1,1,1,1,1,1,1,0,0,
- 0,0,0,0,0,1,1,1,1,0,
- 0,0,0,0,0,1,1,1,0,0,
- 1,0,0,0,1,1,1,1,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,0,0,0,0,]
- N[9]=[
- 0,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,1,0,0,
- 1,1,1,0,0,1,1,1,0,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,1,0,0,1,1,1,1,0,
- 1,1,1,1,1,1,1,1,1,0,
- 0,1,1,1,1,1,1,1,1,0,
- 0,0,0,0,0,1,1,1,1,0,
- 0,0,0,0,0,1,1,1,0,0,
- 1,1,1,0,1,1,1,1,0,0,
- 1,1,1,1,1,1,1,1,0,0,
- 0,1,1,1,1,1,1,0,0,0,]
- N[2]=[
- 1,1,1,1,1,1,0,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,0,0,1,1,1,1,0,0,
- 0,0,0,0,0,1,1,1,0,0,
- 0,0,0,0,0,1,1,1,0,0,
- 0,0,0,0,1,1,1,0,0,0,
- 0,0,0,1,1,1,1,0,0,0,
- 0,0,1,1,1,0,0,0,0,0,
- 0,1,1,1,0,0,0,0,0,0,
- 1,1,1,0,0,0,0,0,0,0,
- 1,1,1,0,0,0,0,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,]
- N[5]=[
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,0,0,0,0,0,0,0,
- 1,1,0,0,0,0,0,0,0,0,
- 1,1,1,0,0,0,0,0,0,0,
- 1,1,1,1,1,0,0,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 0,0,0,0,1,1,1,1,0,0,
- 0,0,0,0,0,1,1,1,0,0,
- 0,0,0,0,0,1,1,1,0,0,
- 1,0,0,0,1,1,1,1,0,0,
- 1,1,1,1,1,1,1,1,0,0,
- 1,1,1,1,1,1,0,0,0,0,]
- N[4]=[
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,1,1,1,1,0,0,0,
- 0,0,0,1,1,1,1,0,0,0,
- 0,0,1,1,1,1,1,0,0,0,
- 0,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,1,0,0,
- 1,1,1,1,1,1,1,1,1,0,
- 1,1,1,1,1,1,1,1,1,0,
- 0,0,0,1,1,1,1,1,0,0,
- 0,0,0,0,1,1,1,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,]
- N[8]=[
- 0,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,1,0,0,
- 1,1,1,1,1,1,1,1,0,0,
- 1,1,1,0,0,1,1,1,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,0,0,0,
- 1,1,1,1,1,1,1,1,0,0,
- 1,1,1,0,0,1,1,1,1,0,
- 1,1,0,0,0,0,1,1,1,0,
- 1,1,1,0,0,1,1,1,1,0,
- 1,1,1,1,1,1,1,1,0,0,
- 0,1,1,1,1,1,1,0,0,0,]
- import Image,ImageEnhance,ImageFilter
- first = 11 #第一个字位置
- second = 23
- thirt = 35
- last = 47
- width = 19 #每个字宽度
- interval = 2
- top = 2
- low = 15
- #通过中值过滤、对比度加强去噪
- img = Image.open('22.jpeg')
- img = img.filter(ImageFilter.MedianFilter()) #中值过滤函数
- img_bright = ImageEnhance.Contrast(img)
- img_bright = img_bright.enhance(3.0) #加强对比3.0倍
- img_bright.save('img_final.jpg')
- #剪切数字
- img = Image.open('img_final.jpg')
- img_number = []
- box_left =[11,23,35,47]
- box_right =[21,33,45,57]
- for i in range(4):
- box = (box_left[i],top,box_right[i],low)
- img_single = img.crop(box)
- file_name = 'number_' + str(i) + '.jpg'
- img_single.save(file_name)
- matrix = open('matrix.txt','a') #储存单个数字的矩阵
- for i in range(4):
- cube = []
- file_name = 'number_' + str(i) + '.jpg'
- img = Image.open(file_name)
- for j in range(13):
- for k in range(10):
- if(img.getpixel((k,j)) <(50,50,50) ): #RGB值接近0,即黑色字体
- cube.append(1)
- else:
- cube.append(0)
- s = 0
- matrix.write('cube[' + str(i) + ']=[' )
- for q in cube:
- if(s%10==0):
- matrix.write('\\n')
- matrix.write(str(q) + ',')
- s=s+1
- matrix.write("]\\n\\n\\n")
- matrix.close()
- matrix = open('matrix.txt') #读取验证码的标记数组
- final = {}
- for i in range(4):
- final[i] = []
- for i in range(4):
- matrix.readline()
- for j in range(13):
- a = matrix.readline()
- a = list(a)
- for l in range(10):
- if(l==0):
- final[i].append(a[l])
- else:
- final[i].append(a[l*2])
- for z in range(2):
- matrix.readline()
- matrix.close()
- num = {}
- for i in range(4):
- num[i] = []
- for i in range(4):
- max_counter = 0
- for k in range(10):
- counter = 0
- for j in range(130):
- if(int(final[i][j])==N[k][j]): #注意将str的final转换成int
- counter +=1
- if(counter > max_counter):
- max_counter = counter
- num[i]=k
- print(num)
- #该片段来自于http://www.codesnippet.cn/detail/050720134453.html
来源: http://www.codesnippet.cn/detail/050720134453.html