OpenCVからPillowに画像データを変換

PythonOpenCVから画像を扱うPillowというライブラリに渡してみます。

OpenCVからPillowにはNumpy配列を介して渡せるのですが、3色の順番がOpenCVはBGRで、PillowがRGBという違いがあるようで、変換が必要でした。

import cv2
import PIL.Image

def buildVideoCaptures(videoPath, outputPath):
    cap = cv2.VideoCapture(videoPath)
    if not cap.isOpened(): return

    _, img = cap.read()
    # imgは読み込んだフレームのNumpy配列でのピクセル情報(BGR)
    # imgのshapeは (高さ, 横幅, 3)

    # BGRをRGBに変換
    # これをしないと色が変になる
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

    # Numpy配列からPillowのImageオブジェクトに変換
    img = PIL.Image.fromarray(img)

    # 画像ファイルで書き出す
    img.save(outputPath, format = "JPEG")

buildVideoCaptures("./sample.mp4", "./thumbnail.jpg")

バージョン情報

$ pipenv install opencv-python
$ pipenv install pillow

$ pipenv run pip list
Package       Version
------------- --------
numpy         1.19.5
opencv-python 4.5.1.48
Pillow        8.1.0
pip           20.3.1
setuptools    51.0.0
wheel         0.36.1

関連

PillowとOpenCVについて最近の記事