怎么把图片数据保存为txt?
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')
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
然后再保存为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在执行出发之前不是二值图像吗?还真不是,原因是,因为图像在缩小的时候,出现插值。

7、正确的做法是,先缩小图片,然后在进行灰度化和二值化处理。
但是效果还是不太好。


8、还需要把数据类型转化为整数型:
c = (c/255).astype(np.int8)

9、要想把0和1的位置互换,需要:
c = 1-c
