Matplotlibで画像を読み込んで表示#

※記事内に商品プロモーションを含むことがあります。

公開日

画像ファイルを読み込んで、Matplotlibのグラフ上に表示する方法を解説します。 おおまかには以下の手順となります。

  1. Pillowというライブラリで画像ファイルを読み込む。

  2. Matplotlibのimshow()メソッドで画像を表示する。

Pillowとは、Pythonの画像処理ライブラリです。 PillowはPIL (Python Imaging Library) というライブラリからフォークして開発されています。 Matplotlibをインストールすると、Pillowも同時にインストールされます。

なお、matplotlib.image.imread()関数を利用して画像を読み込む方法もありますが、 過去のバージョンのMatplotlibと互換性を維持するため残されているだけで、Matplotlib 3.9の時点では非推奨です。 そのため、この記事では解説しません。

シンプルな例#

まず、画像を読み込んで表示するだけのシンプルな例を以下に示します。

from PIL import ImageでPillowをインポートします。 次に、Image.open()に画像ファイルのパスを指定して読み込みます。 読み込んだ画像(img変数)をAxesオブジェクト(ax変数)のimshow()に渡すことにより、画像をグラフ上に表示できます。

import matplotlib.pyplot as plt
from PIL import Image

img = Image.open("coffee.png")

fig, ax = plt.subplots()
ax.imshow(img)
plt.show()
../_images/1e022acae14bd6bce6cfe35f1147627a7bbb18104582e80ac14037074bd0eb04.png

グラフのx, y軸の範囲は、画像のピクセル数と等しくなります。 上記の例では、316×316サイズのPNG画像を表示しています。

通常のグラフとはy軸の向きが反転することに注意してください。 画像の左上が原点 (0, 0) となります

なお、Image.open()で読み込んだ画像は、以下のようにPIL.PngImagePlugin.PngImageFileクラスのオブジェクトとなります。

type(img)
PIL.PngImagePlugin.PngImageFile

グラフを重ねる#

読み込んだ画像の上にグラフを重ねることも可能です。 画像を読み込んだものと同じAxesオブジェクトでplot()メソッドを実行します。

折れ線グラフを重ねた例を以下に示します(y軸が反転していることに注意ください)。

x = [0, 100, 200, 300]
y = [10, 200, 50, 150]

fig, ax = plt.subplots()
ax.imshow(img)
ax.plot(x, y)
plt.show()
../_images/72abe564f74b13f5132736aa15451209ad638fe29c5cab3d4f4fd8481992e302.png

軸と目盛りを非表示にする#

画像をグラフ上に表示する場合、軸や目盛りが意味を持たない場合もあります。 そのようなときには、ax.axis("off")を実行すると軸と目盛りを非表示にできます。

fig, ax = plt.subplots()
ax.imshow(img)
ax.axis("off")
plt.show()
../_images/48a59e7e854e3ff09531747f4f44c870d914b53a5f4a744b4aa411e5ae3019c5.png

参考サイト#