python中的图像数组

时间:2015-01-08 13:43:10

标签: python arrays python-3.x numpy matplotlib

我正在使用numpy和matplotlib在python中导入图像。我想创建一个3d数组,这样在第1和第2轴我有像素值,在第0轴我有图像编号。到目前为止,我有这样的事情:

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中有更优雅的方法吗?可能无需预先分配巨大的3D阵列(n张照片,x维度,y维度)

1 个答案:

答案 0 :(得分: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] )