python
1コード 2import cv2 3import numpy as np 4 5fname_in1 = 'target.png' 6fname_in2 = 'template.png' 7fname_out = 'TemplateMatchingDrawLines.png' 8 9target_img = cv2.imread(fname_in1) 10template_img = cv2.imread(fname_in2) 11target_img = np.float64(cv2.cvtColor(target_img,cv2.COLOR_RGB2GRAY)) #グレースケール化 12template_img = np.float64(cv2.cvtColor(template_img,cv2.COLOR_RGB2GRAY)) #グレースケール化 13 14H,W = target_img.shape 15h,w = target_img.shape 16 17SSD_Min = 99999999999999999 #最小値を探すために値を初期化する 18SSD_x = 0 #最小となるxを格納するための変数 19SSD_y = 0 #最小となるyを格納するための変数 20 21for y in range(0,H-h): 22 for x in range(0,W-w): 23 diff = (target_img[y:y+h,x:x+w] - template_img)**2 24 ssd = diff.sum() #SSDを計算 25 if(SSD_Min>ssd):#SSDの値が最小となるよう更新 26 SSD_Min = ssd 27 SSD_x = x #xを更新 28 SSD_y = y #yを更新 29 30target_img = cv2.imread(fname_in1) 31 32cv2.rectangle(target_img,(SSD_x,SSD_y),(SSD_x+w,SSD_y+h),(255,0,0),1) 33print(SSD_Min,SSD_x,SSD_y) #デバッグ用 34cv2.imwrite(fname_out,target_img) 35```### 前提・実現したいこと 36 37ここに質問の内容を詳しく書いてください。 38pythonを使ったテンプレートマッチングの練習をしています. 39仕組みの理解をしたいと考え,opencvのmatchTemplate()を使わずにSSD(Sum of Square Difference)を計算することでテンプレートマッチングを行おうとしています. 40 41 42### 発生している問題・エラーメッセージ 43上記のコードを実行すると,SSD_Minの値が更新されておらずテンプレートマッチングがうまくいきませんでした. 44実行自体はできているのですが,四角形の描写ができていません
エラーメッセージ
該当のソースコード
ソースコード
試したこと
SSDの計算方法が間違っていないか試すため,同様の計算方法を用いて各画素にSSD値を格納した画像を出力してみましたが,画像はきちんと出力されました.
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー