
ピーター
Pythonで画像処理をするための型変換について知りたい!
今回は画像データとして取り扱えるPillow型とOpenCV型について、それぞれへの変換方法について、備忘録として記載します。
Pillowについて
Pillowとは、PIL(Python Image Library)というPython向けの画像処理ライブラリです。
リサイズ(拡大縮小)や回転、トリミングのような基本的な画像処理が可能です。
Pillowで画像を扱う場合、numpy.ndarrayから変換可能
numpy(numpy.ndarray)をImageオブジェクトに変換することで画像として処理することができます。
その場合、Image.fromarray関数を使用することで変換できます。
OpenCV型について
PythonのOpenCVは、基本的にnumpy(numpy.ndarray)で扱います。
注意点としては、PythonのOpenCVでは、RGB画像は B→G→Rの順番で保存されています。単純にnumpy(numpy.ndarray)をコピーするだけでは、色版が変化してしまうので、注意が必要です。
Pillow→OpenCVに変換方法
Pillow→OpenCVに変換するための手順
- Pillow型をnumpy(numpy.ndarray)に変換
- RGB画像の場合、RGB→BGRに変更
Pillow→OpenCVのサンプルコード
import numpy as np
import cv2
### PIL型 => OpenCV型 の変換関数
def pil2opencv(in_image):
out_image = np.array(in_image, dtype=np.uint8)
if out_image.ndim == 2:
pass
elif out_image.shape[2] == 3:
out_image = cv2.cvtColor(out_image, cv2.COLOR_RGB2BGR)
return out_image
OpenCV→Pillowの変換方法
OpenCV→Pillowに変換するための手順
- グレースケール画像の場合、Gray2
- RGB画像の場合、RGB→BGRに変更
- numpy(numpy.ndarray)からImage型に変換(Image.fromarray関数)
OpenCV→Pillowのサンプルコード
from PIL import Image
import cv2
### OpenCV型 => PIL型 の変換関数
def opencv2pil(in_image):
new_image = in_image.copy() #複製
if new_image.ndim == 2:
pass
elif new_image.shape[2] == 3:
new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2RGB)
else:
return None
new_image = Image.fromarray(new_image)
return new_image
PDFファイルにOpenCVの画像処理をしたい場合
以前に書いた記事で、PDFを画像ファイルに変換している方法を紹介しています。
convert_from_path関数で変換した場合、Image型になっているため、今回の方法を応用することでOpenCVの画像処理ライブラリを利用することができます!

バツイチエンジニアの株式投資と副業収入で目指せサイドFIRE | まずは小さく始めて目指せサイドFIRE
実装時に参考にしたサイト

【Python】Pillow ↔ OpenCV 変換 - Qiita
グレースケールやαチャンネル付きの画像でも変換できるように関数化しました。Pillow → OpenCVimport numpy as npimport cv2def pil2cv(image): ''' PI...
コメント