python下对图像进行批处理少不了读取文件夹下的全部图像,下面就以具体实例分享下对文件夹下的特定格式图像全部读取并转化为数组保存的代码,代码详解请见注释 代码同时包含了矩阵和一维数组的相互转化
我的图像位于D:\test中,目录中为以下文件
里面的bmp文件为minist数据集的两张图片,大小为28*28
D:\test 的目录
2016/11/03 21:19 <DIR> .
2016/11/03 21:19 <DIR> ..
2016/11/03 21:22 1,596 num7.txt
2016/11/03 21:22 1,010 test.py
2016/07/02 20:16 1,862 TestImage_1.bmp
2016/07/02 20:16 1,862 TestImage_2.bmp
2016/07/02 20:16 1,862 TestImage_2222.jpg
5 个文件 8,192 字节
2 个目录 444,028,071,936 可用字节
#-*- coding: utf-8 -*-
import os
import numpy
from PIL import Image #导入Image模块
from pylab import * #导入savetxt模块
#以下代码看可以读取文件夹下所有文件
# def getAllImages(folder):
# assert os.path.exists(folder)
# assert os.path.isdir(folder)
# imageList = os.listdir(folder)
# imageList = [os.path.abspath(item) for item in imageList if os.path.isfile(os.path.join(folder, item))]
# return imageList
# print getAllImages(r"D:\\test")
def get_imlist(path): #此函数读取特定文件夹下的bmp格式图像
return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.bmp')]
c=get_imlist(r"D:\test") #r""是防止字符串转译
print c #这里以list形式输出bmp格式的所有图像(带路径)
d=len(c) #这可以以输出图像个数
data=numpy.empty((d,28*28)) #建立d*(28*28)的矩阵
while d>0:
img=Image.open(c[d-1]) #打开图像
#img_ndarray=numpy.asarray(img)
img_ndarray=numpy.asarray(img,dtype='float64')/256 #将图像转化为数组并将像素转化到0-1之间
data[d-1]=numpy.ndarray.flatten(img_ndarray) #将图像的矩阵形式转化为一维数组保存到data中
d=d-1
print data
A=numpy.array(data[0]).reshape(28,28) #将一维数组转化为矩28*28矩阵
#print A
savetxt('num7.txt',A,fmt="%.0f") #将矩阵保存到txt文件中
输出结果如下图所示