画像を比較して異なる部分を表示する(間違い探し)
一部分だけ異なる2つの画像を比較し、異なる部分を抜き出して抽出する間違い探しです。
やること
- 2つの画像をグレースケールで読み出し、要素を比較する。
- 要素の異なる部分のみを抽出した画像をファイル名を付けて保存します。
使った関数
- cv2.imread : 画像ファイルの読み出し
- numpy.where : 配列の各要素を調べ決められた操作を行う
- numpy.array : 配列の生成
- cv2.imwrite : 画像をファイル名を付けて保存
環境
準備
2つの画像を用意します。上の画像の方が木が3本多く、それ以外は同一です。
castle1.png
castle2.png
コード
import cv2 #OpenCVのインポート import numpy as np #numpyをnpという名前でインポート img1 = cv2.imread('castle1.png',0) #画像castle1.pngをグレースケールで読み込む img2 = cv2.imread('castle2.png',0) #画像castle2.pngをグレースケールで読み込む #img1,img2の各要素を比較し、等しければ0、異なれば1の値を持つ配列comparisonを生成 comparison=np.where(img1 == img2, 0, 1) #img1とcomparisonの要素の積、配列differenceを生成 #2つの画像の要素が等しい部分は0が掛けられるため0(黒)となり #2つの画像の要素が等しい部分は1が掛けられるため値を持つ #グレースケール画像として出力するためdtype = np.uint8を指定する difference=np.array(img1*comparison,dtype = np.uint8) cv2.imwrite('difference.png',difference) #ファイル名difference.pngでdifferenceを保存
実行結果
画像の異なる部分のみが抽出されたファイルが保存されます。
以下のサイトを参考にさせていただきました
Numpy公式 >> numpy.where
Qiita >> [Numpy] 2つのndarrayを比較する