Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

画像を比較して異なる部分を表示する(間違い探し)

一部分だけ異なる2つの画像を比較し、異なる部分を抜き出して抽出する間違い探しです。

やること
  • 2つの画像をグレースケールで読み出し、要素を比較する。
  • 要素の異なる部分のみを抽出した画像をファイル名を付けて保存します。
使った関数
  • cv2.imread : 画像ファイルの読み出し
  • numpy.where : 配列の各要素を調べ決められた操作を行う
  • numpy.array : 配列の生成
  • cv2.imwrite : 画像をファイル名を付けて保存
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0
準備

2つの画像を用意します。上の画像の方が木が3本多く、それ以外は同一です。
f:id:T_A_T:20190320195509p:plain
castle1.png

f:id:T_A_T:20190320195541p:plain 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を保存  

実行結果

画像の異なる部分のみが抽出されたファイルが保存されます。 f:id:T_A_T:20190330095539p:plain

以下のサイトを参考にさせていただきました

Numpy公式 >> numpy.where
Qiita >> [Numpy] 2つのndarrayを比較する

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村