【Python】Pillow型とOpenCV型の変換方法について

python
スポンサーリンク
ピーター
ピーター

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に変換するための手順

  1. Pillow型をnumpy(numpy.ndarray)に変換
  2. 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に変換するための手順

  1. グレースケール画像の場合、Gray2
  2. RGB画像の場合、RGB→BGRに変更
  3. 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】pdfファイルを画像ファイルに変換する方法/541/(新しいタブで開く)

実装時に参考にしたサイト

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

コメント

ランキング

タイトルとURLをコピーしました