Pynote

Python、機械学習、画像処理について

Jupyter Notebook / Jupyter Lab で画像をインラインで表示する方法

概要

Jupyter Notebook / Jupyter Lab で画像をインラインで表示する方法を紹介する。

numpy 形式の画像

1. IPython.display.Image オブジェクトを作成する。

IPython.display.Image オブジェクトを作成するには、pngjpeg などのフォーマットでエンコードされたバイト列を渡す必要がある。
そのため、imencode() で numpy 形式の画像をエンコードしてバイト列に変換する。

pynote.hatenablog.com

2. IPython.display.display で表示する。

IPython.display.Image オブジェクトを IPython.display.display に渡すと、インラインで表示される。

import cv2
from IPython.display import Image, display


def show_numpy_img(img):
    ret, encoded = cv2.imencode(".png", img)
    display(Image(encoded))


numpy_img = cv2.imread("sample.jpg")
show_numpy_img(numpy_img)

PIL 形式の画像

1. IPython.display.Image オブジェクトを作成する。

PIL.Image オブジェクトをエンコードされたバイト列に変換する。
PIL.Image.save に io.BytesIO オブジェクトを 渡すことで、ファイルの代わりに io.BytesIO オブジェクトに出力される。
io.BytesIO.getvalue でそのバイト列を取得できるので、これから IPython.display.Image オブジェクトを作成する。

2. IPython.display.display で表示する。

IPython.display.Image オブジェクトを IPython.display.display に渡すと、インラインで表示される。

import io
import PIL
from IPython.display import Image, display


def show_pil_img(img):
    encoded = io.BytesIO()
    img.save(encoded, format='png')
    display(Image(encoded.getvalue()))


pil_img = PIL.Image.open("sample.jpg")
show_pil_img(pil_img)