2013-03-25 4 views
5


У меня есть 5 фотографий, и я хочу преобразовать каждое изображение в 1-й массив и поместить его в матрицу как вектор.
Я хочу, чтобы иметь возможность конвертировать каждый вектор в изображение снова.
Convert Image (png) To Matrix And Then To 1D Array

img = Image.open('orig.png').convert('RGBA') 
a = np.array(img) 

Я не знаком со всеми особенностями NumPy и спрашивает, если есть другие инструменты, которые я могу использовать.
Спасибо.

ответ

15
import numpy as np 
from PIL import Image 

img = Image.open('orig.png').convert('RGBA') 
arr = np.array(img) 

# record the original shape 
shape = arr.shape 

# make a 1-dimensional view of arr 
flat_arr = arr.ravel() 

# convert it to a matrix 
vector = np.matrix(flat_arr) 

# do something to the vector 
vector[:,::10] = 128 

# reform a numpy array of the original shape 
arr2 = np.asarray(vector).reshape(shape) 

# make a PIL image 
img2 = Image.fromarray(arr2, 'RGBA') 
img2.show() 
+0

в разделе # делать что-то в вектор, я хочу нормализовать изображение (как вектор), мне нужно выполнить линейную нормировку или выравнивание гистограммы? и еще один вопрос, я могу использовать ваш код кода как функцию, и если у меня есть массив изображений, как я помещаю их все в одну большую матрицу, и каждое изображение является вектором? –

+0

Пожалуйста, продемонстрируйте код, который вы используете для нормализации. Я не понимаю, почему вы хотите разместить 5 изображений в одной матрице и как вы собираетесь их нормализовать. – unutbu

+1

потому что я хочу сделать пространство лица, каждый вектор - изображение, я хочу использовать выравнивание гистограммы, потому что я хочу узнать, как работает распознавание лица! –

2

Я использовал для преобразования 2D в 1D изображения массива, используя этот код:

import numpy as np 
from scipy import misc 
from sklearn.decomposition import PCA 
import matplotlib.pyplot as plt 

face = misc.imread('face1.jpg'); 
f=misc.face(gray=True) 
[width1,height1]=[f.shape[0],f.shape[1]] 
f2=f.reshape(width1*height1); 

, но я пока не знаю, как изменить его обратно в 2D позже в коде, также отметить, что не все импортированные библиотеки необходимы, я надеюсь, что это поможет