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