自制汉字字库,识别汉字(二)(字母篇)

本文介绍如何识别宋体-常规-小五字体中的字母,分析字母在显示屏的显示效果,发现其为6x12矩阵。通过截取和生成子模字典,实现了图片中6x12矩阵区域内的字母识别。
摘要由CSDN通过智能技术生成

识别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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值