🐍
Python: 画像の一致度合を比較する
OpenCVで2つの画像を比較してどのくらい一致しているかを判定したい時がありましたので、備忘録としてソースを残しておきます。
使用する画像
完全一致しているかを判定する場合
import cv2
import numpy as np
# 元画像
img_original = cv2.imread("after1.png")
# 比較対象画像1枚目(同じ画像)
img_comparison1 = cv2.imread("after1.png")
# 比較対象画像2枚目(違う画像)
img_comparison2 = cv2.imread("after3.png")
# 画像が完全一致するかを判定する
print(np.array_equal(img_original, img_comparison1))
print(np.array_equal(img_original, img_comparison2))
結果
True
False
np.array_equal関数は、2つのndarrayが一致しているかを判定する関数です。
これを利用して、引数に比較したい画像を指定する事で、完全一致しているかを判定する事ができます。
np.array_equal(img_to_np1, img_to_np2)
どのくらい一致しているかを取得する
2つの画像を比較し、一致している画素数を取得する事で、どのくらい一致しているかを判断する事ができます。
そんな時に使えるソースコードがこちらです。
import cv2
import numpy as np
# 画像を比較し、一致していない箇所を表示する
# 元画像
img_original = cv2.imread("after1.png")
# 比較対象画像1枚目(同じ画像)
img_comparison1 = cv2.imread("after1.png")
# 比較対象画像2枚目(違う画像)
img_comparison2 = cv2.imread("after3.png")
# 画素がどのくらい一致しているかを確認する
print(np.count_nonzero(img_original == img_comparison1))
print(np.count_nonzero(img_original == img_comparison2))
結果
39,000
156
説明
np.count_nonzero関数は、引数に条件を指定する事で条件に一致している個数を取得できる関数です。
これを利用して、引数に
画像1 == 画像2
と指定する事で、一致している画素数を取得できます。
戻り値は、一致している個数です。
np.count_nonzero(画像1 == 画像2)
Discussion