2015-01-08 53 views
1

我使用numpy和matplotlib在python中導入圖像。我想創建一個3d陣列,這樣在第1和第2軸上我有像素值,在第0軸上我有圖像編號。到目前爲止,我得到了這樣的東西:python中的圖像數組

from PIL import Image                
import numpy                  
import matplotlib.pyplot as plt             
import glob 

imageFolderPath = '/home/B/Pictures/' 
imagePath = glob.glob(imageFolderPath+'/*.JPG') 

im_array = numpy.array(Image.open(imagePath[0]).convert('L'), 'f')    
im_array = numpy.expand_dims(im_array, axis=0)         

for c in range(1, len(imagePath)):            
    im_array_new = numpy.array(Image.open(imagePath[c]).convert('L'), 'f')  
    im_array_new = numpy.expand_dims(im_array_new, axis=0)      
    im_array = numpy.append(im_array, im_array_new, axis=0) 

這項工作,但它是一些醜陋的。我不喜歡這樣一個事實,即我必須擴展二維數組的維度,然後將它們附加在一起。 有沒有更好的方法來做到這一點在python中?可能,而無需預先分配一個巨大的三維陣列(N照片,x維度,y維度)

回答

3

而不是一個for循環,你可以做一個數組出列表理解的:

from PIL import Image                
import numpy                  
import glob 

imageFolderPath = '/home/B/Pictures/' 
imagePath = glob.glob(imageFolderPath + '/*.JPG') 

im_array = numpy.array([numpy.array(Image.open(img).convert('L'), 'f') for img in imagePath]) 
+0

這是迄今爲止更優雅然後我的。謝謝 – BiA