1

我需要访问文件夹中的所有图像并将其存储在矩阵中。我能够使用matlab做到这一点,这是代码:

input_dir = 'C:\Users\Karim\Downloads\att_faces\New Folder';
image_dims = [112, 92];

filenames = dir(fullfile(input_dir, '*.pgm'));
num_images = numel(filenames);

images = [];
for n = 1:num_images
    filename = fullfile(input_dir, filenames(n).name);
    img = imread(filename);
    img = imresize(img,image_dims);   
end

但我需要使用 python 来完成,这是我的 python 代码:

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


#import images
dirname = "C:\\Users\\Karim\\Downloads\\att_faces\\New folder"


#get number of images and dimentions
path, dirs, files = os.walk(dirname).next()
num_images = len(files)
image_file = "C:\\Users\\Karim\\Downloads\\att_faces\\New folder\\2.pgm"
im = Image.open(image_file)
width, height = im.size



images = []

for x in xrange(1, num_images):
    filename = os.listdir(dirname)[x]
    img = Image.open(filename)
    img = im.convert('L')
    images[:, x] = img[:]

但我收到此错误:IOError: [Errno 2] No such file or directory: '10.pgm' 尽管该文件存在。

4

1 回答 1

6

我不太确定你的最终目标是什么,但试试更像这样的东西:

import numpy as np
import Image
import glob

filenames = glob.glob('/path/to/your/files/*.pgm')
images = [Image.open(fn).convert('L') for fn in filenames]
data = np.dstack([np.array(im) for im in images])

这将产生一个宽度 x 高度 x num_images numpy 数组,假设所有图像都具有相同的尺寸。

但是,您的图像将未排序,因此您可能想要这样做filenames.sort()

此外,您可能想要也可能不想要 3D numpy 数组,但这完全取决于您实际在做什么。如果您只想单独操作每个“帧”,那么不要费心将它们堆叠成一个巨大的数组。

于 2013-04-07T20:43:46.587 回答