テンプレートマッチングは、様々なurlで紹介されていますが、 私の場合、次のurlを参考にさせて頂きました。
Pythonでテンプレートマッチング、OpenCVサンプルコードと解説 : ネットサーフィンの壺
詳細は以下で、w1800の引違い窓の画像をテンプレートとし、同様の開口を検出しています。
で、 お手軽なものの、拡大縮小や回転には弱そう という印象。
#!/usr/local/bin/python # -*- coding: utf-8 -*- from PIL import Image import cv2 from datetime import datetime import matplotlib matplotlib.use('Agg') import matplotlib.pylab as plb import numpy as np import sys def main(): org_file = sys.argv[1] tmpl_file = sys.argv[2] org_img = cv2.imread(org_file) # グレースケール化 org_gray_tmp = cv2.cvtColor(org_img, cv2.COLOR_BGR2GRAY) tmpl_img = cv2.imread(tmpl_file,0) w, h = tmpl_img.shape[::-1] res = cv2.matchTemplate(org_gray_tmp, tmpl_img, cv2.TM_CCOEFF_NORMED) # 類似度の閾値以上のものを、描画 threshold = 0.8 #類似度の閾値 loc = np.where( res >= threshold) for pt in zip(*loc[::-1]): cv2.rectangle(org_img, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2) time_str = datetime.now().strftime("%Y%m%d_%H%M%S") new_file = 'new_' + time_str + '.png' cv2.imwrite(new_file, org_img) if __name__ == '__main__': main()
↑こう書くと↓こう表示されます。 閾値(threshold)を変え、複数回、行っています。
テンプレート(窓)→