13


我有 5 张图片,我想将每个图像转换为 1d 数组并将其作为向量放入矩阵中。
我希望能够再次将每个矢量转换为图像。

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

我不熟悉 numpy 的所有功能,想知道是否还有其他工具可以使用。
谢谢。

4

3 回答 3

29
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()
于 2013-03-25T10:50:53.337 回答
6
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如上所述的多重赋值让我们计算转换为一维向量和从一维向量转换所需的元素数量。

您可以显示 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 = 数据类型);每个似乎都有效。

我希望这是有帮助的。

于 2018-12-01T16:27:59.007 回答
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,还要注意并非所有导入的库都是必需的,希望对您有所帮助

于 2017-03-24T20:08:57.327 回答