我需要访问文件夹中的所有图像并将其存储在矩阵中。我能够使用 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] 没有这样的文件或目录:'10.pgm' 虽然文件存在。
最佳答案
我不太确定您的最终目标是什么,但请尝试更像这样的事情:
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 数组,但这完全取决于您实际在做什么。如果您只想单独操作每个“帧”,那么不要费心将它们堆叠成一个巨大的数组。
关于python - 使用python将图像转换为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862153/