0.引言
平时上网干啥的基本上都会接触验证码,或者在机器学习学习过程中,大家或许会接触过手写体识别/验证码识别之类问题,会用到手写体的数据集;
自己尝试写了一个生成手写体图片的python程序,在此分享下生成单张 30*30像素的手写体数字1-9图像 的一种实现方法;
我是利用random生成随机数1-9,然后PIL写到图像上,然后经过旋转、扭曲处理,得到“手写体”,这里没有加干扰线和干扰点;
得到的手写体数字图像如图1所示;
实现比较简单,用了PIL库,不需要额外安装opencv啥的,有兴趣可以自己试试。
图1 生成的手写体数字1-9
图2 利用generate_pngs.py写入到文件夹3的数字3图像
如果你想生成手写体的字母/汉字也可以:
图3 利用generate_single_png.py生成汉字的手写体
源码上传到了我的GitHub: https://github.com/coneypo/Generate_handwritten_number
1.设计流程
图4 整体设计流程
图5 生成的图像经过的处理
1.1 新建一个空白图像img_50,尺寸大小为50*50
img_50_blank = Image.new('RGB', (50, 50), (255, 255, 255))
为什么我这里要先生成50*50的空白图像?
因为图像背景(50*50像素的画布)初始化的时候设置为白色(颜色数组(255, 255, 255)),而背景色之外的其实是黑色;
之后需要进行旋转处理,如果直接新建30*30像素的画布,旋转之后边上会出现黑边,如图6所示;
所以我新建了一个50*50,然后旋转之后从中间裁出来一个30*30的图像出来;
图6 直接用30*30像素的画布写字旋转(会出现黑边)
1.2 利用PIL在图像上写文字