Python OpenCV / 2枚の画像を比較して異なっている箇所を四角で囲う方法

プラグラミング言語「PYTHON」を使ってみよう!!

業務自動化・効率化の実例を踏まえ、解説できればと思っています。対象は、プログラムを学び始めた初心者向けとなります。

今回の内容

  • 2枚の画像を比較して異なっている箇所を四角で囲う



使用するのはopenCV

使用するのは、画像処理ライブラリのopenCVです。ここではopenCVがインストールされているのを前提として書き進めていきます。

サンプルコード

import cv2
#画像読み込み、グレースケール化
img_1 = cv2.imread('diff_test1.jpg',1)
img_2 = cv2.imread('diff_test2.jpg',1)
img_1_gray = cv2.cvtColor(img_1, cv2.COLOR_BGR2GRAY)
img_2_gray = cv2.cvtColor(img_2, cv2.COLOR_BGR2GRAY)

#画像を引き算
img_diff = cv2.absdiff(img_1_gray, img_2_gray)

#2値化
ret2,img_th = cv2.threshold(img_diff,20,255,cv2.THRESH_BINARY)

#輪郭を検出
contours, hierarchy = cv2.findContours(img_th, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

#閾値以上の差分を四角で囲う
for i,cnt in enumerate(contours):
    x, y, width, height = cv2.boundingRect(cnt)
    if width > 50 or height > 50:
        cv2.rectangle(img_1, (x, y), (x+width, y+height), (0, 0, 255), 1)
        
cv2.imwrite("diff_box最終.jpg", img_1)

元画像 1枚目

元画像 2枚目


この2枚の画像の差分を検出します。

出力


上のプログラムで処理することで、差分(雲とバツ印)が四角で囲われました。



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