电脑
python3+
对图片进行灰度化和二值处理:a = cv2.imread('a.png')b = cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)ret,c=cv2.threshold(b,200,255,cv2.THRESH_BINARY)
改变图片大小:c = cv2.resize(c,(30,30))
此时的c就是一个30*30的矩阵,把它写入到txt里面:f = open('0.txt','w')for i in c: for j in i: f.write(str(j)+' \r') f.write('\n')f.close()很不整齐。
为了看起来整齐划一,需要补齐数字:f = open('1.txt','w')for i in c: for j in i: f.write(str(j).rjust(3)+' \r') #在每个数字左边填写空格,使之变成3位数 f.write('\n')f.close()此时看起来就规整多了。
还有,'\n'*2相当于执行两次换行。f = open('36.txt','w')for i in c: for j in i: f.write(str(j).rjust(3)+' \r') #在每个数字左边填写空格,使之变成3位数 f.write('\n') #每次输入完一行,就来两次回车f.close()
其实,里面不需要保留太大的数据,既然是二值图像,只需用0和1区分就行,于是,对c执行除法:c = c/255然后再保存为txt:f = open('0.txt','w')for i in c: for j in i: f.write(str(j)+' \r') f.write('\n')f.close()结果成这样了。图像c在执行出发之前不是二值图像吗?还真不是,原因是,因为图像在缩小的时候,出现插值。
正确的做法是,先缩小图片,然后在进行灰度化和二值化处理。但是效果还是不太好。
还需要把数据类型转化为整数型:c = (c/255).astype(np.int8)
要想把0和1的位置互换,需要:c = 1-c
用这样的方法,可以把手写数字保存为txt数据。