Liquidsのロゴ Liquids

0

画像の表示【matplotlib】

matplotlib

このwikiではmatplotlibで画像を表示する方法を紹介します。

matplotlibで画像を表示するにはmatplotlib.pyplot.imshow()を使用します。
引数にはPILで開いた画像オブジェクトをnumpy配列にして与えます。(引数に与える型はArrayLikeであるため、この方法でなくてもOK)

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

img = Image.open("paris.jpg")

plt.imshow(np.asarray(img))
plt.show()

RGBではなくスカラ形式で画像を与えると、カラーマップで色付けがされます。そのため、スカラ形式で画像を与え、カラーマップもgrayとすることでグレースケールで画像を表示できます。

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

img = Image.open("paris.jpg")

plt.imshow(np.asarray(img)[:,:,0], cmap='gray')
plt.show()

aspect引数を使用して軸の比を変更できます。
ピクセルを表示して挙動を確認してみます。

import matplotlib.pyplot as plt
import numpy as np

img_data = np.linspace(0,1,9)
img_data = img_data.reshape(3,3)
plt.imshow(img_data, aspect=2)
plt.show()


このように、1ピクセルの占める軸の長さの比が違うことがわかります。ここで重要なのは画像全体のアスペクトは指定した値にならないということです。
そのため、画像全体としてのアスペクト比を調整するには工夫が必要です。
画像全体としてのアスペクト比はaspect=(1/<元の画像のアスペクト比>)*<指定したいアスペクト比>とすることで指定できます。

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

# 画像オブジェクトの取得
img = Image.open('paris.jpg')
#元の画像サイズを取得
img_size = img.size
#縦/横の比を計算
original_img_aspect = img_size[1] / img_size[0]
#目的の画像アスペクト比(縦/横)
target_aspect = 2
#ピクセルのアスペクト比を(1/original_img_aspect)*target_aspectにする
plt.imshow(np.asarray(img), aspect=(1/original_img_aspect)*target_aspect)
plt.show()

origin引数を使用して画像の上下を反転できます。origin引数にはupperlowerを指定でき、upperがデフォルトです。
lowerを指定すると画像が上下反転をします。

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

img = Image.open("paris.jpg")

plt.imshow(np.asarray(img), origin='lower')
plt.show()

Liquidsのロゴ Liquids

Liquidsは誰でも投稿・編集ができる技術Wikiコミュニティ📝です。

あなたもLiquidsで技術Wikiを
書いてみませんか?