多语言展示
当前在线:272今日阅读:2今日分享:38

怎么把图片数据保存为txt?

在计算机里面,图片就是一个数字矩阵。下面,我要用python把图片对应的数字矩阵保存到txt文件里面。
工具/原料
1

电脑

2

python3+

方法/步骤
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

注意事项

用这样的方法,可以把手写数字保存为txt数据。

推荐信息