OpenCVとPIL(Pillow)の画像変換

概要

Pythonで画像を扱う場合はPillowやOpenCVを用いると思います。ですが、OpenCVで開いた画像はNumpyのndarray型であるため、Pillowで処理することはできません。そこで相互のライブラリでの画像変換についてまとめました。

やりたいこと

OpenCVの関数imread()で画像を開いた後に, PIL Imageの形式に変更して使う。

OpenCV→PIL Image

Open CVimread()で開いた画像はnumpyのndarray型となっている。これをPIL Image型にするためには

  • OpenCVで開いた場合はBGRフォーマットとなっているためRGBフォーマットに変更する
  • ndarray型をPIL Image型にする

必要がある。前者は cv2.cvtColor()関数 後者は Image.fromarray()関数 を用いることでできる。以下にコードを示す。

import cv2
import numpy as np
from PIL import Image

img = cv2.imread("hoge/hoge/img.png")

# BGR画像→RGB画像に変換する
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
im_pil = Image.fromarray(img)