Python で NumPy 配列を PIL イメージに変換する
このチュートリアルでは、PIL
パッケージの Image.fromarray()
を使って、NumPy 配列を PIL
イメージに変換する方法を説明します。Python Imaging Library (PIL
) は、様々な画像処理関数を持つ Python のライブラリです。
関数 Image.fromarray()
は配列オブジェクトを入力として受け取り、その配列オブジェクトから作成した画像オブジェクトを返します。
Python で NumPy 配列を PIL 画像に変換する
import numpy as np
from PIL import Image
image = Image.open("lena.png")
np_array = np.array(image)
pil_image = Image.fromarray(np_array)
pil_image.show()
出力:
現在の作業ディレクトリにある画像 lena.png
を Image
から open()
メソッドを用いて読み込み、画像オブジェクトを返します。
次に、この画像オブジェクトを numpy.array()
メソッドを用いて NumPy 配列に変換します。
関数 Image.fromarray()
を用いて配列を PIL
イメージオブジェクトに変換し、最後に show()
メソッドを用いてイメージオブジェクトを表示します。
import numpy as np
from PIL import Image
array = np.random.randint(255, size=(400, 400), dtype=np.uint8)
image = Image.fromarray(array)
image.show()
出力:
ここでは、0
から 255
までの乱数を含むサイズ 400x400
の NumPy 配列を作成し、その配列を Image.fromarray()
関数を用いて Image
オブジェクトに変換し、show()
メソッドを用いて image
を表示します。
Matplotlib の Colormap を使って NumPy 配列を PIL イメージに変換する
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib import cm
image_array = plt.imread("lena.jpg")
image_array = image_array / 255
image = Image.fromarray(np.uint8(cm.plasma(image_array) * 255))
image.show()
出力:
これは Matplotlib
パッケージの plasma
カラーマップを適用します。画像にカラーマップを適用するには、まず array
を 1
の最大値で正規化します。image_array
の要素の最大値は上の例では 255
です。そこで、image_array
を 255 で割って正規化します。
次に、image_array
にカラーマップを適用し、再度 255
を乗算します。次に、np.uint8()
メソッドを用いて要素を int
形式に変換します。最後に、関数 Image.fromarray()
を用いて配列を画像に変換します。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn