2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

jupyter notebookで複数画像を表示 〜画像名を添えて〜

Last updated at Posted at 2021-01-10

はじめに

jupyter notebookで画像を複数表示したい、さらにタイトルに各変数名を表示したいとなった。
変数名のタイトルの方はいつ使うねんという話はある(リスト名で与えるとできないので)

(思いつきで書いたものをそのまま貼り付けるので、もっといい方法はあるのかも。)

やりたかったこと

画像表示関数を作る。
それに引数として与えた変数名のリストから、変数名をタイトルとして表示する。

画像表示関数

jupyter notebookで複数の画像を1つずつplt.show()していては、画像を比較したいときに不便だったので、きれいに表示してくれる関数を作った。

% matplotlib inline
from matplotlib import pyplot as plt
import numpy as np

#画像のリスト、列数、画像サイズ
def show_imgs(lis,col,size=15):
    row = -(-len(lis)//col)
    fig,ax = plt.subplots(row,col,figsize = (size,size))
    if row == 1:
        for i, img in enumerate(lis):
            ax[i].imshow(img)
    else:
        for i, img in enumerate(lis):
            j = i//col
            k = i%col
            ax[j][k].imshow(img)
    plt.show()

タイトルを変数名にする

show_imgs([img1,img2,img3],3)などと与えた時に、タイトルをimg1,img2,...という風に付ける。
titles = ["img1","img2","img3"]というリストを用意したり、
dic = {"img1":img1,"img2":img2,"img3":img3}という辞書を引数としてもいいが、コンパクトになるなら、という動機。
(注)引数群を文字列として取得するので、リストが変数で与えられているとできない。(実用性あるの?)

#画像のリスト、列数、画像サイズ、フォントサイズ
def show_imgs(lis,col,size=15,f=20):
    #引数を取得
    frame = inspect.currentframe()
    stack = inspect.getouterframes(frame)
    arg_names = stack[1].code_context[0].split('(')[1].split(')')[0]   #type : str   ex, ["img1","img2","img3"],arg1
    vals = arg_names.split('[')[1].split(']')[0].split(',')
        
    row = -(-len(lis)//col)
    fig,ax = plt.subplots(row,col,figsize = (size,size))
    if row == 1:
        for i, img in enumerate(lis):
            ax[i].set_title(vals[i],fontsize=f)
            ax[i].imshow(img)
    else:
        for i, img in enumerate(lis):
            j = i//col
            k = i%col
            ax[j][k].set_title(vals[i],fontsize=f)
            ax[j][k].imshow(img)
    plt.show()

stackは、以下のようなリストになっている。

[
FrameInfo(frame=, filename='', lineno=15, function='show_imgs', code_context=[' stack = inspect.getouterframes(frame)\n'], index=0),
FrameInfo(frame=, filename='', lineno=25, function='', code_context=['show_imgs(["img1","img2","img3"],arg1)\n'], index=0),
...

出力例

## おわりに
画像処理をしていて、処理を施しても微小な変化しかない時に並べて比較したかったので作りました。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?