0、引子
之前用的是系统的手写体文件进行学习,但测试后发现,无论是用knn还是ann,在识别我自己的手写体方面总是识别率超低,基本是10%。查阅资料后发现,老外的数字书写顺序和我们不同,故设计下自己的训练集。
1、主要思路
(1)用autoCAD设计好1cm的格子,形成29*20的格,然后打印,手写。
(2)用红色圆珠笔写字:原因,要识别的是红色圆珠笔写的;打印进纸时无法保证正直,要去除横竖线。
(3)扫描,得到图片a
(3)程序处理:提取字体,横竖对齐,并去除外围干扰。
(3.1)加载图片后将图片转成hsv,然后设定范围为红色,提取字体
(3.2)用Dilate扩大字体范围(膨胀)
(3.3)用Threshold二值化处理,得到图片b
(3.4)用FindContours查找字体边界
(3.5)用Cv2.ArcLength查找所有的字体边界,去除边界周长太小的边界;循环操作所有边界。
用 Cv2.MinAreaRect判断外接正矩形,判断该矩形中心是否和已有的矩形中心太近,如太近,合并矩形,否则认为是正常字体,用DrawContours绘制字体边框进行人工判断程序参数的合理性。
(3.6)用Cv2.Rectangle绘制该正确的外接矩形,显示外接矩形进行人工判断
(3.7)将所有字体外接矩形以y坐标为主序,x坐标为次序,做排序。
(3.8)根据排序后的矩形,分别从图片a和b中提取字体,顺次放到一个背景为黑色的图片中。
完工。
原始图片如下:
查找边界,人工判断的图片如下:
规整化之后的图片如下:
(此图片用的是imshow,无缩放;上面两张图片用的是picturebox,有缩放)