2013-03-25 178 views
5


我有5张图片,我想要将每个图像转换为1d数组,并将其放入矩阵作为矢量。
我希望能够将每个矢量再次转换为图像。
转换图像(PNG)矩阵然后到一维数组

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

在部分#做一些向量,我想归一化图像(作为向量)我需要做线性归一化或直方图均衡?还有一个问题,我可以使用你的代码作为函数,如果我有一个图像数组如何我把他们所有人都放在一个大矩阵,每个图像是矢量? – 2013-03-25 10:57:05

+0

请显示您用于规范化的代码。我不明白你为什么要在一个矩阵中放置5幅图像,以及你打算如何规范化它们。 – unutbu 2013-03-25 12:30:20

+1

因为我想制作脸部空间,每个矢量都是一个图像,我想使用直方图均衡化,因为我想了解脸部识别如何工作! – 2013-03-25 14:44:18

2

我曾经使用此代码2D转换成一维图像阵列:

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后面的代码,还要注意的是不所有的进口图书馆是必要的,我希望它可以帮助