📚
OpenCVからPIL、PILからOpenCVのデータ変換
OpenCVからPIL、PILからOpenCVのデータ変換
OpenCVで生成した画像をPILで読み込む、もしくは逆方向の操作をしたいと思った時に混乱したので整理してみることにした
結論
COLOR_RGB2BGR
, COLOR_BGR2RGB
でRGB(赤緑青)の並びを相互変換すればよい
PIL→OpenCV
import numpy as np
import cv2
def pil2cv(pil_image):
cv_image = np.array(pil_image, dtype=np.unit8)
if cv_image.ndim == 2: # モノクロ
pass
elif cv_image.shape[2] == 3: # カラー
cv_image = cv2.cvtColor(cv_image, cv2.COLOR_RGB2BGR)
else cv_image.shape[2] == 4: # 透過
cv_image = cv2.cvtColor(cv_image, cv2.COLOR_RGBA2BGRA)
return cv_image
OpenCV→PIL
from PIL import Image
import cv2
def cv2pil(cv_image):
pil_image = cv_image.copy()
if pil_iamge.ndim == 2: # モノクロ
pass
elif pil_image.shape[2] == 3: # カラー
pil_image = cv2.cvtColor(pil_image, COLOR_BGR2RGB)
elif pil_image.shape[2] == 4: # 透過
pil_image = cv2.cvtColor(pil_image, COLOR_BGRA2RGBA)
return pil_image
補足
変換が必要になるのはOpenCVがチャンネル(色)をBGRで扱うため
他のほとんどのライブラリはRGBで扱う(多分)
従ってOpenCVと他の画像関連ライブラリを合わせて使う場合には変換が必要となる
Discussion