🐍

Python: 画像の一致度合を比較する

2021/12/18に公開

Python で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)

一致度合いを取得する

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)
GitHubで編集を提案

Discussion