2013-04-07 1 views
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 

하지만 난 파이썬을 사용하여 작업을 수행하는 데 필요한 여기 내 파이썬 코드입니다 :

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 ' 파일이 있지만.

+3

cwd가 이미지와 같은 위치에 있지 않으면 파일의 절대 경로를'Image.open'에 전달해야합니다. 'os.path.join (path, filename)'이 작동해야합니다. – GP89

+0

@ GP89 : 'filename = os.list.dir (dirname) [x]'를 'filename = os.path.join (dirname, x)'으로 바꿔야한다는 뜻입니까? – user2229953

+0

아니요,'os.listdir' 라인에서 돌아 오는'filename'은 단지 "10.pgm"입니다. 그냥 전달하면 스크립트가 실행되는 현재 디렉토리에서 찾게됩니다. 새로운 변수'filepath = os.path.join (path, filename)'을 만들고'filepath'를'Image.open'에 전달하십시오. 그러면 IOError를 얻지 않아야합니다. 이것은'filepath' 값이 절대 경로가 될 것이기 때문에 효과가 있습니다. "C : \\ Users \\ Karim \\ Downloads \\ att_faces \\ 새 폴더 \\ 10.pgm"\ – GP89

답변

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 배열로 원할 수도 있고 원하지 않을 수도 있지만, 실제로는 실제로하고있는 것에 달려 있습니다. 각 "프레임"을 개별적으로 조작하려는 경우 하나의 거대한 배열로 스택하지 않아도됩니다.

+0

다른 오류가 있습니다. 'ValueError : 연결할 하나 이상의 배열이 필요합니다.' – user2229953

+1

'파일 이름 '(예 :'print filenames')을보십시오. 지정한 패턴과 일치하는 파일이없는 것 같습니다. –

관련 문제