hiyoko-programingの日記

プログラミングを勉強したてのひよっ子。   エンジニア目指して勉強中。

テンプレートマッチング

◉ テンプレートマッチングとは?

2つの画像を使って一致する部分を見つける方法。

印刷された文字や画像の中から一致する部分を見つけるときに使われる方法。

また、指紋の照合や、車の自動運転で歩行者の認識を行うためにも

使われている技術。

 

◉ 画像を2つ使うように変更する

検索対象画像と、検索対象に含まれるかどうかとを見つけるテンプレート画像を

指定できるようにする。

実行されたときに画像ファイルが1つはあるか判断している部分を

2つあるかどうか判断するよう、指定する。

 

 if len (sys.arvg) < 3:

        print('検索対象画像ファイルとテンプレート画像ファイルの2つを指定してください。')

 sys.exit()

 

◉ テンプレート画像ファイル名を受け取る

     file_templ = sys.argv[2]

 

◉  テンプレート画像を読み込む

検索対象画像を読み込んだ後に、テンプレート画像が読み込みように追加し、

また、画像ファイル2つが正しく読み込めたかどうかを判断するように変更する。

 

    img_template = cv2.imread(file_templ)

    if (img is None) or (img_template is None):

         raise ValueError('検索ファイルが見つかりません。')

 

◉ テンプレートマッチングを行い、結果を表示

<テンプレートマッチングをする方法>
 cv..matchTemplate(検出対象画像, テンプレート画像, 検索手法)

  ⚫︎検索対象画像:検索の対象となる画像

  ⚫︎テンプレート画像:検索する画像

  ⚫︎検索手法:今回は一致精度が高い「cv2.TM_CCOEFF_NORMED」を使用。

 

 result_match = cv2.matchTemplate(img, img_template, cv2.TM_CCOEFF_NOMAED)

    cv2.imshow('Template Matching', result_match)

    cv2.waitKey(0)

 

◉一致した部分を領域情報から一致部分を赤枠で囲む。

 

 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result_match)

    top_left = max_loc

    bottom_right = (top_left[0] + img_template.shape[1],   top_left[1] + img_template.shape[0]) 

   cv2.rectangle(img, top_left, bottom_right, (0,0,255), 2)