Matplotlibで画像を読み込んで表示#
※記事内に商品プロモーションを含むことがあります。
公開日
画像ファイルを読み込んで、Matplotlibのグラフ上に表示する方法を解説します。 おおまかには以下の手順となります。
Pillowというライブラリで画像ファイルを読み込む。
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()

グラフの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()

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