13


5枚の写真があり、各画像を1次元配列に変換し、それをベクトルとして行列に入れたい.
各ベクターを画像に再度変換できるようにしたい。

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。上記のように への複数の割り当てにより、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 = data type); があります。それぞれ効くようです。

これがお役に立てば幸いです。

于 2018-12-01T16:27:59.007 に答える