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

プログラミング
スポンサーリンク




こんにちは、おみです。

OpenCVで2つの画像を比較して、どのくらい一致しているかを判定したい時がありましたので、その時に使用したソースを備忘録として残しておきます。

スポンサーリンク

使用する画像

完全一致しているかを判定する場合

とりあえず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が一致しているかを判定する関数です。

これを利用して、引数に比較したい画像を指定する事で、完全一致しているかを判定する事ができます。

戻り値はboolean型です。

np.array_equal(画像1, 画像2)

どのくらい一致しているかを取得する

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

結果

>> 39000
>> 156

説明

np.count_nonzero関数は、引数に条件を指定する事で条件に一致している個数を取得できる関数です。

これを利用して、引数に

画像1 == 画像2

と指定する事で、一致している画素数を取得できます。

戻り値は、一致している個数です。

np.count_nonzero(画像1 == 画像2)

 

コメント

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