Skip to main content
 首页 » 编程设计

python之使用python将图像转换为矩阵

2025年05月04日17落叶无声

我需要访问文件夹中的所有图像并将其存储在矩阵中。我能够使用 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 数组,但这完全取决于您实际在做什么。如果您只想单独操作每个“帧”,那么不要费心将它们堆叠成一个巨大的数组。