回答編集履歴

1

x

2019/08/21 06:08

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -49,3 +49,195 @@
49
49
  print(f"{max_no} です。")
50
50
 
51
51
  ```
52
+
53
+
54
+
55
+ ## 追記
56
+
57
+
58
+
59
+ 質問のコードを利用してやるなら以下のようにすればよいです。
60
+
61
+
62
+
63
+ ```python
64
+
65
+ import cv2
66
+
67
+ import numpy as np
68
+
69
+
70
+
71
+ match_val = {}
72
+
73
+ def main():
74
+
75
+ # 入力画像とテンプレート画像をで取得
76
+
77
+ img = cv2.imread("image1.jpg")
78
+
79
+ temp1 = cv2.imread("1.jpg")
80
+
81
+ temp2 = cv2.imread("2.jpg")
82
+
83
+ temp3 = cv2.imread("3.jpg")
84
+
85
+ temp4 = cv2.imread("4.jpg")
86
+
87
+ temp5 = cv2.imread("5.jpg")
88
+
89
+ temp6 = cv2.imread("6.jpg")
90
+
91
+ temp7 = cv2.imread("7.jpg")
92
+
93
+ temp8 = cv2.imread("8.jpg")
94
+
95
+
96
+
97
+ # グレースケール変換
98
+
99
+ gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
100
+
101
+ temp1 = cv2.cvtColor(temp1, cv2.COLOR_RGB2GRAY)
102
+
103
+ temp2 = cv2.cvtColor(temp2, cv2.COLOR_RGB2GRAY)
104
+
105
+ temp3 = cv2.cvtColor(temp3, cv2.COLOR_RGB2GRAY)
106
+
107
+ temp4 = cv2.cvtColor(temp4, cv2.COLOR_RGB2GRAY)
108
+
109
+ temp5 = cv2.cvtColor(temp5, cv2.COLOR_RGB2GRAY)
110
+
111
+ temp6 = cv2.cvtColor(temp6, cv2.COLOR_RGB2GRAY)
112
+
113
+ temp7 = cv2.cvtColor(temp7, cv2.COLOR_RGB2GRAY)
114
+
115
+ temp8 = cv2.cvtColor(temp8, cv2.COLOR_RGB2GRAY)
116
+
117
+
118
+
119
+ # テンプレート画像の高さ・幅
120
+
121
+ h, w = temp1.shape
122
+
123
+
124
+
125
+ # テンプレートマッチング(OpenCVで実装)
126
+
127
+ match = cv2.matchTemplate(gray, temp1, cv2.TM_CCOEFF_NORMED)
128
+
129
+ min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
130
+
131
+ pt = max_pt
132
+
133
+ print(min_value, max_value, min_pt, max_pt)
134
+
135
+ match_val[1] = max_value # テンプレート画像1を使ってテンプレートマッチングしたときの類似度の最大値を保存
136
+
137
+
138
+
139
+ match = cv2.matchTemplate(gray, temp2, cv2.TM_CCOEFF_NORMED)
140
+
141
+ min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
142
+
143
+ pt = max_pt
144
+
145
+ print(min_value, max_value, min_pt, max_pt)
146
+
147
+ match_val[2] = max_value # テンプレート画像2を使ってテンプレートマッチングしたときの類似度の最大値を保存
148
+
149
+
150
+
151
+ match = cv2.matchTemplate(gray, temp3, cv2.TM_CCOEFF_NORMED)
152
+
153
+ min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
154
+
155
+ pt = max_pt
156
+
157
+ print(min_value, max_value, min_pt, max_pt)
158
+
159
+ match_val[3] = max_value # テンプレート画像2を使ってテンプレートマッチングしたときの類似度の最大値を保存
160
+
161
+
162
+
163
+ match = cv2.matchTemplate(gray, temp4, cv2.TM_CCOEFF_NORMED)
164
+
165
+ min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
166
+
167
+ pt = max_pt
168
+
169
+ print(min_value, max_value, min_pt, max_pt)
170
+
171
+ match_val[4] = max_value # テンプレート画像2を使ってテンプレートマッチングしたときの類似度の最大値を保存
172
+
173
+
174
+
175
+ match = cv2.matchTemplate(gray, temp5, cv2.TM_CCOEFF_NORMED)
176
+
177
+ min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
178
+
179
+ pt = max_pt
180
+
181
+ print(min_value, max_value, min_pt, max_pt)
182
+
183
+ match_val[5] = max_value # テンプレート画像2を使ってテンプレートマッチングしたときの類似度の最大値を保存
184
+
185
+
186
+
187
+ match = cv2.matchTemplate(gray, temp6, cv2.TM_CCOEFF_NORMED)
188
+
189
+ min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
190
+
191
+ pt = max_pt
192
+
193
+ print(min_value, max_value, min_pt, max_pt)
194
+
195
+ match_val[6] = max_value # テンプレート画像2を使ってテンプレートマッチングしたときの類似度の最大値を保存
196
+
197
+
198
+
199
+ match = cv2.matchTemplate(gray, temp7, cv2.TM_CCOEFF_NORMED)
200
+
201
+ min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
202
+
203
+ pt = max_pt
204
+
205
+ print(min_value, max_value, min_pt, max_pt)
206
+
207
+ match_val[7] = max_value # テンプレート画像2を使ってテンプレートマッチングしたときの類似度の最大値を保存
208
+
209
+
210
+
211
+ match = cv2.matchTemplate(gray, temp8, cv2.TM_CCOEFF_NORMED)
212
+
213
+ min_value, max_value, min_pt, max_pt = cv2.minMaxLoc(match)
214
+
215
+ pt = max_pt
216
+
217
+ print(min_value, max_value, min_pt, max_pt)
218
+
219
+ # テンプレートマッチングの結果を出力
220
+
221
+ cv2.rectangle(img, (pt[0], pt[1] ), (pt[0] + w, pt[1] + h), (0,0,200), 3)
222
+
223
+ cv2.imwrite("output.jpg", img)
224
+
225
+ match_val[8] = max_value # テンプレート画像2を使ってテンプレートマッチングしたときの類似度の最大値を保存
226
+
227
+
228
+
229
+ # 類似度が一番大きいときのキーの値を出力する。
230
+
231
+ max_no = max(match_val, key=match_val.get)
232
+
233
+ print(f"{max_no} です。")
234
+
235
+
236
+
237
+
238
+
239
+ if __name__ == "__main__":
240
+
241
+ main()
242
+
243
+ ```