この記事は古川研究室 古川研究室 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()
これだけで簡単に画像が表示できちゃいます。
(今回使ったフリー画像のダウンロードのサイトはこちらです。)
##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()
1つのデータ点が1ピクセルに対応していることが分かります。データ点が多いほど画素数が増え、滑らかな画像になります。ここのカラーマップは、デフォルトでは入力データ点の最大値と最小値(ここでは1.0と0.0)に応じて、色付けされています。カラーマップの最大値と最小値を指定したい場合は、vmin,vmax
を引数にもってきます。ここでは、vmin=-1,vmax=1
にしています。
im = plt.imshow(data,vmin=-1,vmax=1)
左側にデフォルトの場合、vmin=-1,vmax=1
に指定した場合を示しています。色付けが変化したことが分かります。
カラーマップを変更するとき
imshowの引数cmap
を指定することで、カラーマップを変更することができます。ここでは、グレースケールで表示するために、cmap='Greys'
としています。デフォルト値はcmap='viridis'
です。カラーマップの選択の際にはChoosing Colormaps in Matplotlibを参照してください。
im = plt.imshow(data, cmap='Greys')
上下を入れ替えて描画するとき
デフォルトは左上から順にデータを並べていますがimshowの引数をorigin='lower'
にすると、左下からデータを並べてくれます。これにより、上下を入れ替えて描画することができます。デフォルトはorigin='upper'
です。
詳しくはMatplotlibのtutorial、origin and extent in imshowに詳しく記載されています。
im = plt.imshow(data, origin='lower')
#おわりに
本当に簡単にですが、Matplotlibのimshowについてまとめました。
この記事が誰かの役に立つと幸いです。
#参考文献
[1]Matplotlibで画像を表示
https://qiita.com/zaburo/items/5637b424c655b136527a