前提・実現したいこと
テンプレートマッチングを行った際に、コンソールに表示された値のうち、1行目の数値が一番大きいなら「1です」、2行目の数値が一番大きいなら「2です」と表示されるようにしたいです。どのように書けばよいか全くわからないので教えていただきたいです。よろしくお願いいたします。
該当のソースコード
import cv2 import numpy as np def main(): # 入力画像とテンプレート画像をで取得 img = cv2.imread("image1.jpg") temp1 = cv2.imread("1.jpg") temp2 = cv2.imread("2.jpg") temp3 = cv2.imread("3.jpg") temp4 = cv2.imread("4.jpg") temp5 = cv2.imread("5.jpg") temp6 = cv2.imread("6.jpg") temp7 = cv2.imread("7.jpg") temp8 = cv2.imread("8.jpg") # グレースケール変換 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) temp1 = cv2.cvtColor(temp1, cv2.COLOR_RGB2GRAY) temp2 = cv2.cvtColor(temp2, cv2.COLOR_RGB2GRAY) temp3 = cv2.cvtColor(temp3, cv2.COLOR_RGB2GRAY) temp4 = cv2.cvtColor(temp4, cv2.COLOR_RGB2GRAY) temp5 = cv2.cvtColor(temp5, cv2.COLOR_RGB2GRAY) temp6 = cv2.cvtColor(temp6, cv2.COLOR_RGB2GRAY) temp7 = cv2.cvtColor(temp7, cv2.COLOR_RGB2GRAY) temp8 = cv2.cvtColor(temp8, cv2.COLOR_RGB2GRAY) # テンプレート画像の高さ・幅 h, w = temp1.shape # テンプレートマッチング(OpenCVで実装) match = cv2.matchTemplate(gray, temp1, cv2.TM_CCOEFF_NORMED) min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match) pt = max_pt print(min_value, max_value, min_pt, max_pt) match = cv2.matchTemplate(gray, temp2, cv2.TM_CCOEFF_NORMED) min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match) pt = max_pt print(min_value, max_value, min_pt, max_pt) match = cv2.matchTemplate(gray, temp3, cv2.TM_CCOEFF_NORMED) min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match) pt = max_pt print(min_value, max_value, min_pt, max_pt) match = cv2.matchTemplate(gray, temp4, cv2.TM_CCOEFF_NORMED) min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match) pt = max_pt print(min_value, max_value, min_pt, max_pt) match = cv2.matchTemplate(gray, temp5, cv2.TM_CCOEFF_NORMED) min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match) pt = max_pt print(min_value, max_value, min_pt, max_pt) match = cv2.matchTemplate(gray, temp6, cv2.TM_CCOEFF_NORMED) min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match) pt = max_pt print(min_value, max_value, min_pt, max_pt) match = cv2.matchTemplate(gray, temp7, cv2.TM_CCOEFF_NORMED) min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match) pt = max_pt print(min_value, max_value, min_pt, max_pt) match = cv2.matchTemplate(gray, temp8, cv2.TM_CCOEFF_NORMED) min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match) pt = max_pt print(min_value, max_value, min_pt, max_pt) # テンプレートマッチングの結果を出力 cv2.rectangle(img, (pt[0], pt[1] ), (pt[0] + w, pt[1] + h), (0,0,200), 3) cv2.imwrite("output.jpg", img) if __name__ == "__main__": main()
補足情報(FW/ツールのバージョンなど)
上の例で言うと、入力画像(image1.jpg)と、1~8までのテンプレート画像(1.jpg~8.jpg)をテンプレートマッチングさせて、数字の1の画像がマッチングしたので1行目が一番大きな値になっています。この際に、「1です」と追加表示させたいです。2や3の時も同様に、「2です」「3です」と表示させたいです。
回答1件
あなたの回答
tips
プレビュー