Pillow とOpenCV(numpy) で読み込んだ画像に対して一致しているか調べる

同じ画像ファイルをPillow とOpenCV でそれぞれ読み込み、 一致しているか確認する処理を書きました。

import cv2
import numpy as np
from PIL import Image

def is_equal(cv_img, pil_img):
    return np.array_equal(cv_img,
            np.asarray(pil_img.convert('RGB'))[:, :, ::-1])

if __name__ == '__main__':
    img_file = 'test.png'
    cv_img = cv2.imread(img_file)
    pil_img = Image.open(img_file)
    print(is_equal(cv_img, pil_img))

結果

True

2つのNumpy の配列が等しいかは、numpy.array_equal 関数を使用します。 また、Pillow のImage オブジェクトをNumpy の配列に変換するには、numpy.asarray 関数を使用します。
ただしこれらの関数に読み込んだデータを直接入れてもFalse が帰ってきますので、 色情報が揃うようにpillow で読み込んだデータを変換します。