我分别在python中导入和加载图像数据时遇到问题

时间:2019-08-27 06:52:19

标签: python image-processing

我是python的初学者。当我想从具有名称的文件夹中导入一些图像时,会发生我的问题。

我的文件: building_3.tif building_21.tif building_22.tif building_25.tif building_27.tif building_36.tif building_44.tif building_49.tif building_53.tif building_70.tif building_101.tif building_248.tif building_1002.tif

我只是想导入它们并分别放置在nd矩阵(张量)中。 例如,如果我们有(14,264,120)张量,则building_1002应该放置在最后(13,264,120)中,而building_3应该放置在第一(0,264,120)中。

没有错误发生,但建筑物图像未分别放置在张量中。

import numpy as np 
import glob
import os
from PIL import Image

path = '/path/'


image_list = []
all_data =np.zeros((14,264,120))
i=0
for filename in glob.glob(path + '/building_*.tif'): 
    im=Image.open(filename)
    image_list.append(im)
    n = len(image_list)
    all_data[i,:,:]=im
    i=i+1

variable explorer

分别发生的是: building_1002.tif(264,120,4) building_101.tif(264,120,4) building_21.tif(264,120,4) building_22.tif(264,120,4) building_23.tif(264,120,4) building_248.tif(264,120,4) building_25.tif(264,120,4) building_27.tif(264,120,4) building_3.tif(264,120,4) building_36.tif(264,120,4) building_44.tif(264,120,4) building_49.tif(264,120,4) building_53.tif(264,120,4) building_70.tif(264,120,4)

提前感谢您的合作

3 个答案:

答案 0 :(得分:1)

您可以预先对文件名进行排序

names = glob.glob(path + '/building_*.tif')
names = sorted(names,lambda x:x.split(".")[0].split("_")[1])

然后使用名称数组读取for循环中的文件。

答案 1 :(得分:0)

似乎您只为(14,264,120)分配了14 *(264,120,4)的空间。也许您应该为图片分配足够的空间(264,120,4 * 14)。

答案 2 :(得分:0)

谢谢大家。 来自venkata krishnan 并通过此链接How to sort this list of strings using a substring?

正确答案是:

names = glob.glob('building_*.tif')
list_names= sorted(names, key=lambda elem:int(elem[elem.find('_')+1:elem.find('.')]))