将图片转化为矩阵并存储在文本中
1. \11\zheng_chang文件夹下的图片(256*256)如下图所示:
2. 将zheng_chang文件夹下所有的图片转化为矩阵,详细代码如下:
import os
import numpy as np
from PIL import Image
from pylab import *
#此函数读取特定文件夹下的jpg格式图像地址信息,存储在列表中
def get_imlist(path):
return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]
# r""是防止字符串转译
# c=['zheng_chang\\1.jpg', 'zheng_chang\\2.jpg', 'zheng_chang\\3.jpg'] 以list形式输出jpg格式的所有图像(带路径)
c=get_imlist(r"zheng_chang")
d=len(c) # 图像个数
data=np.empty((1,256*256*3)) # 建立d*(1,256*256*3)的随机矩阵
# 遍历每张图片
for i in range(d):
img = Image.open(c[i]) # 打开图像
img_ndarray = np.asarray(img, dtype='float64') / 256 # 将图像转化为数组并将像素转化到0-1之间
data = np.ndarray.flatten(img_ndarray) # 将图像的矩阵形式转化为一维数组保存到data中
A=np.array(data).reshape(256,256*3) # 将一维数组转化为矩阵
savetxt('0_%d.txt'%i,A,fmt="%.2f",delimiter=',') # 进行存储保存为两位小数,数据以","为间隔
#savetxt('0_%d.txt',A,fmt="%.0f") #将矩阵保存到txt文件中转化为二进制0 1 存储
3. 图片转化后生成的TXT文件如下图所示:
4. 读取TXT文件将(256,256*3)矩阵转化为(1,196608),程序如下所示:
def txtMat2vector(filename):
data = np.loadtxt(filename, delimiter=',')
z = data.reshape(1, 196608)
return z
print(img2vector('0_0.txt'))