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

标签 python numpy image-processing

我需要访问文件夹中的所有图像并将其存储在矩阵中。我能够使用 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/

相关文章:

python - 在这种情况下,python 比 C 慢得多的原因是什么?

python - 重绘后 Matplotlib 3D 散点颜色丢失

python - 在 NumPy 数组上使用 += 的意外结果

python - np.dot 用于二维矩阵之间的多个乘积

image-processing - 查找轮廓错误 'support only 8uC1 images'

python - 如何在没有线程或任务队列的情况下在 Flask 中运行后台作业

python - 在 Python 中以编程方式创建算术特殊方法(又名工厂函数 HOWTO)

python - 如何使用 numpy 或 Theano 将一个矩阵的整数值用作另一个矩阵的索引?

java - 无法对原始类型 int 调用 getGreen()

java - 如何提高pdf中嵌入的签名图像的质量