识别a~z的字母(以宋体-常规-小五举例)
1、字母在显示屏的效果。
打开一个txt文件,选择“宋体-常规-小五”,“Print Screen”然后用画图板打开,放大到最大后可以看到下边的图片,
,
但是会发现字母并不是全部在5x8的矩阵内,比如“J、Q、g、j、p、q、y”都往下1~2个像素点。
通过截取汉字:,会发现汉字都是12X12显示的,返回去观察字母,会发现所有的字母、数字、字符等都是6X12显示的,正好是汉字的一半的。
截取数字和字母的部分得到374x12(单个字6x12)的子模:
2、生成6x12数字、字母子模(字典),数字篇有介绍生成子模的代码,修改传入参数即可。
if __name__ == "__main__":
img = Image.open("letter-1.png")
create_dic(img, 6,12, (0,0,0),"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
得到一个6x12的数字、字母子模(字典)
gCH_dic = {
581217714877742678016:"0",
300046695948902990220:"1",
631964266674202378756:"2",
668818321662261657872:"3",
23058496622323581508:"4",
141903255292887096:"5",
885587874446756020224:"6",
668857768023141908928:"7",
631955267446405873788:"8",
276709042688530301508:"9",
507285496670288101892:"A",
145311190508126712:"B",
595194640723092750336:"C",
1176143240775895875824:"D",
595061801289758295036:"E",
74074116238992229372:"F",
594907496798075495420:"G",
590441121550286127884:"H",
595194636312695029772:"I",
1106821598908986163716:"J",
226130310992358244868:"K",
595049359774056432196:"L",
442721892412573172238:"M",
145311191582245276:"N",
456720211177297248256:"O",
595194636325512806912:"P",
4612881745914627040:"Q",
129379445294504592320:"R",
1033017703602487427996:"S",
144177037688979968:"T",
890207440115331022848:"U",
46140509855760269824:"V",
78417806459972616248:"W",
78426809810936889412:"X",
1175981060599830626388:"Y",
4681449620036:"Z",
12953691510689858:"a",
1175999079396453400576:"b",
733259202829861523457:"c",
735563919947829592084:"d",
87641210116447911940:"e",
34907297239269436:"f",
78433569884376121348:"g",
64582749230263697473:"h",
79570727964579463224:"i",
79587331209775530020:"j",
73786976296516272212:"k",
4406502506500:"l",
73820753568062750724:"m",
129148602265075187808:"n",
129135096412384804972:"o",
124534662797046779982:"p",
110698478841908019300:"q",
}
3、通过子模,可以确定图片中6x12的矩阵区域内是否是数字、字母
用新的gCH_dic替换数字篇中gCH_dic相应代码。
然后main换成下方的代码即可识别图片中的字母。数字:
if __name__ == "__main__":
time1 = time.time()
img = Image.open("letter-digit.png")
imgdic = {}
for j in range(img.size[1]):
for i in range(img.size[0]):
imgdic[(i,j)] = img.getpixel((i, j))
print_img_num(imgdic, (img.size[0], img.size[1]), (6, 12), (0,0,0))
print time.time() - time1