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文件中
輸出結果如下圖所示