我有5张图片,我想将每个图像转换为1d数组并将其作为矢量放入矩阵。
我希望能够将每个矢量再次转换为图像。
img = Image.open('orig.png').convert('RGBA')
a = np.array(img)
我不熟悉numpy的所有功能,并想知道我是否还可以使用其他工具。
感谢。
答案 0 :(得分:20)
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()
答案 1 :(得分:3)
import matplotlib.pyplot as plt
img = plt.imread('orig.png')
rows,cols,colors = img.shape # gives dimensions for RGB array
img_size = rows*cols*colors
img_1D_vector = img.reshape(img_size)
# you can recover the orginal image with:
img2 = img_1D_vector.reshape(rows,cols,colors)
请注意,img.shape
返回一个元组,如上所述,对rows,cols,colors
的多次赋值使我们能够计算在1D向量之间进行转换所需的元素数。
您可以显示img和img2,以查看它们是否相同:
plt.imshow(img) # followed by
plt.show() # to show the first image, then
plt.imshow(img2) # followed by
plt.show() # to show you the second image.
请记住,在python终端中,您必须关闭plt.show()
窗口才能返回到终端以显示下一张图片。
对我来说,这很有意义,并且仅依赖于matplotlib.pyplot。它也适用于jpg和tif图像等。我尝试过的png具有float32 dtype,而我尝试过的jpg和tif具有uint8 dtype(dtype =数据类型);每个似乎都工作。
我希望这会有所帮助。
答案 2 :(得分:1)
我曾经使用以下代码将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,另请注意,并非所有导入的库都是必需的,我希望它有所帮助