LoginSignup
13
3

More than 3 years have passed since last update.

Matplotlibで画像を表示するimshowの初歩

Posted at

この記事は古川研究室 古川研究室 Advent_calender6日目の記事です。
本記事は古川研究室の学生が学習の一環として書いたものです。内容が曖昧であったり表現が多少異なったりする場合があります。

はじめに

imshowは簡単に言うとデータを画像として表示してくれるツールです。画像を表示するときや、データを画像として可視化をする際に役に立ちます。
imshowの第一引数にはRGBAの画像データまたは、2次元のスカラーデータです。cmapを指定することで元の画像をグレースケールなどに変換することができます。

今回は画像を表示する場合と、データを可視化する場合の2つの場合でやってみます。

imshowの詳細は公式リファレンス参照してください。

まずは画像を普通に表示

PIL(Python Image Library)はPythonの画像処理ライブラリです。その他に、OpenCVという画像処理ライブラリもあるみたいです。
PILのインストールは下の通り。

$ pip install pillow

最初におまじないです。

from PIL import Image
import matplotlib.pyplot as plt

まず画像を読み込みます。今回は同じディレクトリに画像ファイルとプログラムを置いています。

#画像の読み込み
im = Image.open("1729971_s.jpg")

imを表示するとこんな感じです。Jpeg画像のRGBのデータが入っていることが分かります。

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=640x427 at 0x2877E085148>

ここでimshowの登場です。引数には、画像データのimのみを渡しています。

plt.imshow(im)
plt.show()

480.jpg
これだけで簡単に画像が表示できちゃいます。
(今回使ったフリー画像のダウンロードのサイトはこちらです。)

2Dのスカラーデータを画像として表示

まずは、おまじないです。


from PIL import Image
import matplotlib.pyplot as plt
#データ生成用にnumpyをインポート
import numpy as np

データの生成と描画

#データの生成、0~1までの25点を生成、2Dにするためにreshape
data = np.linspace(0,1,25).reshape(5,5)
im = plt.imshow(data)
#カラーバーの表示
plt.colorbar(im)
plt.show()

data imshow.jpg

1つのデータ点が1ピクセルに対応していることが分かります。データ点が多いほど画素数が増え、滑らかな画像になります。ここのカラーマップは、デフォルトでは入力データ点の最大値と最小値(ここでは1.0と0.0)に応じて、色付けされています。カラーマップの最大値と最小値を指定したい場合は、vmin,vmaxを引数にもってきます。ここでは、vmin=-1,vmax=1にしています。

im = plt.imshow(data,vmin=-1,vmax=1)

左側にデフォルトの場合、vmin=-1,vmax=1に指定した場合を示しています。色付けが変化したことが分かります。
data imshow grey.png

カラーマップを変更するとき

imshowの引数cmapを指定することで、カラーマップを変更することができます。ここでは、グレースケールで表示するために、cmap='Greys'としています。デフォルト値はcmap='viridis'です。カラーマップの選択の際にはChoosing Colormaps in Matplotlibを参照してください。

im = plt.imshow(data, cmap='Greys')

図1.png

上下を入れ替えて描画するとき

デフォルトは左上から順にデータを並べていますがimshowの引数をorigin='lower'にすると、左下からデータを並べてくれます。これにより、上下を入れ替えて描画することができます。デフォルトはorigin='upper'です。
詳しくはMatplotlibのtutorial、origin and extent in imshowに詳しく記載されています。

im = plt.imshow(data, origin='lower')

図2.png

おわりに

本当に簡単にですが、Matplotlibのimshowについてまとめました。
この記事が誰かの役に立つと幸いです。

参考文献

[1]Matplotlibで画像を表示
https://qiita.com/zaburo/items/5637b424c655b136527a

13
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3