Python での Matplotlib の imread

Suraj Joshi 2021年3月5日
Python での Matplotlib の imread

この記事では、Matplotlib パッケージの imread() メソッドを使って、画像ファイルを配列に読み込む方法を説明します。

matplotlib.pyplot.imread()

matplotlib.pyplot.imread() はファイルから画像を配列に読み込む。

構文

matplotlib.pyplot.imread(fname, format=None)

ここで、fname は読み込みたい画像ファイルの名前、format は画像ファイルのフォーマットを表します。format=None の場合、この関数はファイル名からフォーマットを抽出します。

この関数は、グレースケール画像の場合は MxN、RGB 画像の場合は MxNx3RGBA 画像の場合は MxNx4 の形をした配列を返します。

例:matplotlib.pyplot.imread() 関数を使用して画像を読み取る

import numpy as np
import matplotlib.pyplot as plt

img_array = plt.imread("lena.png")
plt.imshow(img_array)
plt.title("Display Image read using imread()")
plt.axis("off")
plt.show()

出力:

imread メソッドを使用した画像の読み込み

カレントディレクトリ内の画像 lena.pngimread() メソッドで配列に読み込み、imshow() メソッドで画像を表示します。

デフォルトでは、表示される画像には X 軸Y 軸 が目盛り付きで表示されています。軸と目盛りを削除するには、plt.axis('off') 文を用います。最後に、matplotlib.pyplot.show() 関数を用いて画像を表示します。

画像の形状は shape 属性を用いて見ることができます。

import matplotlib.pyplot as plt

img_array = plt.imread("lena.png")
print(img_array.shape)

出力:

(330, 330, 3)

幅 330、高さ 330、チャンネル数 3 の 3 次元画像配列を表す画像の形状 - (330, 330, 330, 3) を出力します。

例:matplotlib.pyplot.imread() 関数を用いて画像を切り抜く

matplotlib.pyplot.imread() が画像を NumPy 配列に読み込んだ後、:演算子を用いて配列をインデックス化することで画像をクリップすることができます。

import matplotlib.pyplot as plt

img_array = plt.imread("lena.png")[50:300, 30:300]
plt.imshow(img_array)
plt.axis("off")
plt.title("Clipped Image")
plt.show()

出力:

imread メソッドを使って画像をクリップする

ここでは、imread() メソッドは画像全体を配列に読み込み、幅 50 から 300 までの位置と高さ 30 から 300 までの位置の要素のみを選択し、インデックス付き配列を img_array に格納します。その後、関数 imshow() を用いてインデックス付き配列を表示します。

import matplotlib.pyplot as plt
import matplotlib.patches as patches

img_array = plt.imread("lena.png")

fig, ax = plt.subplots()
im = ax.imshow(img_array)
patch = patches.Circle((160, 160), radius=150, transform=ax.transData)
im.set_clip_path(patch)

ax.axis("off")
plt.show()

出力:

imread メソッドを用いた円形画像

円形パッチで切り抜いた画像を表示します。ここでは、中心を (160, 160) 、半径を 150 とした円形パッチで画像を切り抜いています。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

関連記事 - Matplotlib Images