HOWTO · Matplotlib

Python で NumPy 配列を PIL イメージに変換する

このチュートリアルでは、PIL パッケージの Image.fromarray()を使って 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()

出力:

NumPy 配列を PIL イメージに変換する Python

現在の作業ディレクトリにある画像 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()

出力:

自己作成した NumPy 配列を PIL イメージに変換する Python

ここでは、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 Colormap を適用した Python による NumPy 配列の PIL イメージへの変換

これは Matplotlib パッケージの plasma カラーマップを適用します。画像にカラーマップを適用するには、まず array を 1 の最大値で正規化します。image_array の要素の最大値は上の例では 255 です。そこで、image_array を 255 で割って正規化します。

次に、image_array にカラーマップを適用し、再度 255 を乗算します。次に、np.uint8() メソッドを用いて要素を int 形式に変換します。最後に、関数 Image.fromarray() を用いて配列を画像に変換します。