下記サイトでは、元画像とテンプレート画像をグレースケール化してマッチングを行っていました。
「ミッキーをテンプレートマッチングで検出する(python)」
記載されていたコードが以下になります。
#coding:utf-8 import cv2 import numpy as np #画像をグレースケールで読み込む fname_img1='test1.png' fname_img2='test2.png' img = cv2.imread(fname_img1, 0) temp = cv2.imread(fname_img2, 0) #マッチングテンプレートを実行 match_result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED) #類似度の設定(0~1) threshold = 0.9 #検出結果から検出領域の位置を取得 loc=np.where(match_result >= threshold) #検出領域を四角で囲んで保存 w, h = temp.shape[::-1] for top_left in zip(*loc[::-1]): bottom_right = (top_left[0] + w, top_left[1] + h) #保存 result = cv2.imread(fname_img1) #height = img.shape[0] #width = img.shape[1] #result = cv2.resize(img , (int(width*1.0), int(height*1.0))) cv2.rectangle(result,top_left, bottom_right, (255, 0, 0), 10) cv2.imwrite("result.png", result)
この通りにやって確かにテンプレートマッチングはできたのですが、カラー画像でテンプレートマッチングを行いたいと考え
img = cv2.imread(fname_img1, 0)
temp = cv2.imread(fname_img2, 0)
の第二引数である0を1に打ち直し、カラー画像に変えた所、以下のエラーを吐きました。
ValueError Traceback (most recent call last) <ipython-input-15-cc4b51740b5c> in <module>() 22 23 #検出領域を四角で囲んで保存 ---> 24 w, h = temp.shape[::-1] 25 for top_left in zip(*loc[::-1]): 26 bottom_right = (top_left[0] + w, top_left[1] + h) ValueError: too many values to unpack (expected 2)
これはshapeという関数を使用した際に返り値が2つ以上だった為に起きたエラーだと考えています。
一度arrayとして変数として受け取るのが良いと、調べたらわかったのですが、どのようにコードを改良すればよいのかいまいちわからないです。ご教示お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/29 05:22
2020/09/29 06:55
2020/09/29 07:24