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

Suraj Joshi 2023年1月30日
  1. Python で NumPy 配列を PIL 画像に変換する
  2. Matplotlib の Colormap を使って NumPy 配列を PIL イメージに変換する
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()

出力:

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

現在の作業ディレクトリにある画像 lena.pngImage から 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 カラーマップを適用します。画像にカラーマップを適用するには、まず array1 の最大値で正規化します。image_array の要素の最大値は上の例では 255 です。そこで、image_array を 255 で割って正規化します。

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

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Matplotlib Images