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

まくまく
まくまく
2枚の画像を比較して異なっている箇所を四角で囲ってみようと思います。

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

OpenCVはインテル社が開発した画像処理ライブラリです。画像や動画を処理するための機能がまとめられており、基本的な画像処理から機械学習までに使用されるライブラリです。今回の記事では「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枚の画像の差分を検出します。

出力


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



この他、OpenCVについてはこちらの記事にまとめています。>>>Python OpenCV 使い方まとめ

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