よちよちpython

独習 python/Qpython/Pydroid3/termux

JupyterNotebookで画像を表示する方法

JupyterNotebookで画像を表示させる方法メモ。



目次


の2つの方法について。



実行環境

Androidスマホ
termux
Python3.8
JupyterNotebook



1. IPython.displayを使う


IPythonというライブラリを使います。
JupyterNotebookがインストールされているならIPythonもインストールされていますので、すぐ使えます。

# インポート
from IPython.display import Image

# 画像ファイル名(パス)
file_name = "jimi.jpg"

# 画像の読み込みと表示
Image(file_name)



実行時の画像

f:id:chayarokurokuro:20200116070226j:plain



画像をリストで与えてfor文で表示できるかな?

# IPythonをインポート
from IPython.display import Image

# 画像ファイル名(パス)
file_name_list = ["jimi.jpg", "t.png"]

# 画像の読み込みと表示
for file_name in file_name_list:
    Image(file_name)

出来ませんでした!
どうやら1枚ずつ指定での表示しか無理げ。
for文を使わず、Image(file_name_list[1])とかにすればイケた。



ネット上の画像もurlから表示できる。

Image(url= 'http://www.google.fr/images/srpr/logo3w.png')



実行時の画像

f:id:chayarokurokuro:20200116070341j:plain



参考
Module: display — IPython 3.2.1 documentation



2.matplotlibを使う


さきにpip install matplotlibなどでインストールします。



手順は

  1. plt.imread()で画像を読み込み配列に変換

  2. plt.imshow()に配列を渡して画像を表示



1.でNumpy配列に変換され、その配列オブジェクトを2.に渡すと画像表示されます。
imshow()にいきなり画像ファイルを渡すとTypeErrorが出ます。

# インポート
import matplotlib.pyplot as plt

# ファイル名、パス
file_name = "jimi.jpg"

# 画像を読込み配列変換し変数に格納
array_obj = plt.imread(file_name)

# 画像の表示
plt.imshow(array_obj)
<matplotlib.image.AxesImage at 0x7dc2d24f10>



実行時の画像

20200116070459



matplotlibを使う場合は画像に目盛りが自動でつきますね。

%matplotlib inlineを書かずとも表示されました。必要だと書いてあるサイトもよくある。JupyterNotebookのバージョンの違いとかかな?

特に必要ありませんが、plt.imread(画像ファイル)で読み込んで作られたNumpy配列の型などを一応確認しておきます。

print("[オブジェクトの型] ",type(array_obj))
print("[配列の形状] ",array_obj.shape)
print("[配列の次元] ",array_obj.ndim)
print("[全要素数] ",array_obj.size)
print("[要素の型] ",array_obj.dtype)
[オブジェクトの型]  <class 'numpy.ndarray'>
[配列の形状]  (498, 385, 3)
[配列の次元]  3
[全要素数]  575190
[要素の型]  uint8



2.2 画像の複数表示


上の方法では、画像が1枚しか表示できません。複数を並べて表示する方法は以下の通りです。

# インポート
import matplotlib.pyplot as plt

# ファイル名、パス
file_name_list = ["jimi.jpg" ,"gyouretsu.png"]

# 複数画像を読み込み配列変換
for i, file_name in enumerate(file_name_list):    
    array_obj = plt.imread(file_name)
    
    # 複数画像表示
    plt.figure()
    plt.subplot(2,1, i+1)
    plt.imshow(array_obj)



実行時の画像

f:id:chayarokurokuro:20200116070610j:plain



plt.figure()やplt.subplot(2,1, i+1)の所で、画像を2行1列に順番通り並べるよう指示しています。
この辺のやり方がいくつかあって混乱するんで、詳しくはまた別の機会に。
今回はここまで。



参考
JupyterNotebook上に画像を表示する2つの方法 | yamagablog

matplotlib - imshow で画像や配列を表示する方法 - Pynote

Numpyだけで画像処理を行い画像処理の仕組みを学ぶ - よちよちpython