質問編集履歴

4

プログラムを修正しました。

2019/01/11 06:22

投稿

chachamaru0421
chachamaru0421

スコア17

test CHANGED
File without changes
test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
  return (self.mouseEvent["x"], self.mouseEvent["y"])
100
100
 
101
-
101
+
102
102
 
103
103
  #取得した座標から特徴点を取得する
104
104
 
@@ -186,7 +186,7 @@
186
186
 
187
187
  print(mouseData.getY())
188
188
 
189
-          self.onMouse(mouseData.getX(),mouseData.getY(),mouseData.getPos())
189
+ self.onMouse(mouseData.getX(),mouseData.getY(),mouseData.getPos())
190
190
 
191
191
  #右クリックがあったら終了
192
192
 
@@ -468,6 +468,8 @@
468
468
 
469
469
  i += 1
470
470
 
471
+
472
+
471
473
  if __name__ == '__main__':
472
474
 
473
475
  Motion().run()

3

プログラムを修正しました。

2019/01/11 06:22

投稿

chachamaru0421
chachamaru0421

スコア17

test CHANGED
File without changes
test CHANGED
@@ -184,7 +184,9 @@
184
184
 
185
185
  print(mouseData.getX())
186
186
 
187
+ print(mouseData.getY())
188
+
187
- print(mouseData.getY()) self.onMouse(mouseData.getX(),mouseData.getY(),mouseData.getPos())
189
+          self.onMouse(mouseData.getX(),mouseData.getY(),mouseData.getPos())
188
190
 
189
191
  #右クリックがあったら終了
190
192
 
@@ -466,6 +468,10 @@
466
468
 
467
469
  i += 1
468
470
 
471
+ if __name__ == '__main__':
472
+
473
+ Motion().run()
474
+
469
475
  ```
470
476
 
471
477
 

2

プログラムを修正しました。

2019/01/11 06:19

投稿

chachamaru0421
chachamaru0421

スコア17

test CHANGED
File without changes
test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
  return (self.mouseEvent["x"], self.mouseEvent["y"])
100
100
 
101
-
101
+
102
102
 
103
103
  #取得した座標から特徴点を取得する
104
104
 
@@ -146,63 +146,11 @@
146
146
 
147
147
  #特徴点(一番最初の画像で取得した特徴点)
148
148
 
149
- self.features_src = None
150
-
151
-
152
-
153
- #取得した座標から特徴点を取得する
154
-
155
- class Motion:
156
-
157
- #コンストラクタ
158
-
159
- def __init__(self):
160
-
161
- #表示ウィンドウ(特徴点追跡用)
162
-
163
- cv2.namedWindow("motion")
164
-
165
- #表示ウィンドウ(特徴点指定用)
166
-
167
- cv2.namedWindow("input window")
168
-
169
- #インターバル
170
-
171
- self.interval = INTERVAL
172
-
173
- #現在のフレーム(カラー)
174
-
175
- self.frame = None
176
-
177
- #現在のフレーム(グレー)
178
-
179
- self.gray_next = None
180
-
181
- #前回のフレーム(グレー)
182
-
183
- self.gray_prev = None
184
-
185
- #特徴点
186
-
187
- self.features = None
188
-
189
- #特徴点のステータス
190
-
191
- self.status = None
192
-
193
- #特徴点のステータス(一番最初の画像で取得した特徴点)
194
-
195
- self.status_src = None
196
-
197
- #特徴点(一番最初の画像で取得した特徴点)
198
-
199
149
  self.features_src = None
200
150
 
201
151
  #メインループ
202
152
 
203
- def run(self):
153
+ def run(self):
204
-
205
- n = 1
206
154
 
207
155
  #最初のフレームの処理
208
156
 

1

プログラムを修正しました。

2019/01/11 06:15

投稿

chachamaru0421
chachamaru0421

スコア17

test CHANGED
File without changes
test CHANGED
@@ -196,23 +196,25 @@
196
196
 
197
197
  #特徴点(一番最初の画像で取得した特徴点)
198
198
 
199
- self.features_src = None
199
+ self.features_src = None
200
200
 
201
201
  #メインループ
202
202
 
203
203
  def run(self):
204
204
 
205
+ n = 1
206
+
205
207
  #最初のフレームの処理
206
208
 
207
209
  self.frame = cv2.imread("IMG_1.tiff")
208
210
 
209
211
  self.gray_prev = cv2.cvtColor(self.frame, cv2.COLOR_BGR2GRAY)
210
212
 
211
- self.gray_next = cv2.cvtColor(self.frame,cv2.COLOR_BGR2GRAY)
213
+ self.gray_next = cv2.cvtColor(self.frame,cv2.COLOR_BGR2GRAY)
212
214
 
213
215
  #最初の特徴点10点を指定
214
216
 
215
- cv2.imshow("input window",self.frame)
217
+ cv2.imshow("input window",self.frame)
216
218
 
217
219
  #コールバックの設定
218
220
 
@@ -234,15 +236,19 @@
234
236
 
235
237
  print(mouseData.getX())
236
238
 
237
- print(mouseData.getY())
238
-
239
- self.onMouse(mouseData.getX(),mouseData.getY(),mouseData.getPos())
239
+ print(mouseData.getY()) self.onMouse(mouseData.getX(),mouseData.getY(),mouseData.getPos())
240
+
241
+ #右クリックがあったら終了
242
+
243
+ elif mouseData.getEvent() == cv2.EVENT_RBUTTONDOWN:
244
+
245
+ break;
240
246
 
241
247
  #特徴点描画と10点の特徴点を取得
242
248
 
243
249
  if self.features is not None:
244
250
 
245
- if len(self.features) >= 10:
251
+ if len(self.features) >= 10:
246
252
 
247
253
  #オプティカルフローの計算
248
254
 
@@ -272,28 +278,30 @@
272
278
 
273
279
  #有効な特徴点のみ残す
274
280
 
275
- self.refreshFeatures()
281
+ self.refreshFeatures()
276
-
277
- #最初の特徴点を格納しておく
278
282
 
279
283
  if len(self.features) >= 10:
280
284
 
285
+ #最初の特徴点を格納しておく
286
+
281
287
  self.status_src = self.status
282
288
 
283
289
  self.features_src = self.features
284
290
 
285
- print("特徴点10個取得出来ました")
291
+ print("特徴点10個取得出来ました")
286
-
292
+
287
- break;
293
+ break;
288
294
 
289
295
  #画像毎の特徴点を抽出し、追跡する
290
296
 
291
- for frame in range(2,FRAME):
297
+ for frame in range(2,FRAME):
292
298
 
293
299
  #グレースケールに変換
294
300
 
295
301
  self.gray_next = cv2.cvtColor(self.frame,cv2.COLOR_BGR2GRAY)
296
302
 
303
+ #self.gray_next = self.frame
304
+
297
305
  #特徴点が登録されている場合にOpticalFlowを計算
298
306
 
299
307
  if self.features is not None:
@@ -322,7 +330,7 @@
322
330
 
323
331
  #有効な特徴点のみ残す
324
332
 
325
- self.refreshFeatures()
333
+ self.refreshFeatures()
326
334
 
327
335
  #フレームに有効な特徴点を描画
328
336
 
@@ -330,7 +338,7 @@
330
338
 
331
339
  for features in self.features:
332
340
 
333
- cv2.circle(self.frame,(features[0][0],features[0][1]),2,(15,241,255),-1,8,0)
341
+ cv2.circle(self.frame,(features[0][0],features[0][1]),2,(15,241,255),-1,8,0)
334
342
 
335
343
  #表示
336
344
 
@@ -354,6 +362,10 @@
354
362
 
355
363
  #マウスクリックで特徴点を指定する
356
364
 
365
+ #クリックされた近傍に既存の特徴点がある場合は既存の特徴点を削除する
366
+
367
+ #クリックされた近傍に既存の特徴点がない場合は新規特徴点を追加する
368
+
357
369
  def onMouse(self,x,y,XY):
358
370
 
359
371
  #最初の特徴点追加
@@ -368,6 +380,8 @@
368
380
 
369
381
  for click in self.features:
370
382
 
383
+ #print(click)
384
+
371
385
  if np.all(click == XY):
372
386
 
373
387
  return
@@ -440,7 +454,7 @@
440
454
 
441
455
  print("feature is out of radius")
442
456
 
443
- return -1
457
+ return -1
444
458
 
445
459
  # 特徴点を新規に追加する
446
460
 
@@ -452,7 +466,7 @@
452
466
 
453
467
  # ndarrayの作成し特徴点の座標を登録
454
468
 
455
- self.features = np.array([[[x, y]]], np.float32)
469
+ self.features = np.array([[[x, y]]],np.float32)
456
470
 
457
471
  self.status = np.array([1])
458
472
 
@@ -472,7 +486,7 @@
472
486
 
473
487
  # 特徴点を高精度化
474
488
 
475
- cv2.cornerSubPix(self.gray_next, self.features, (10, 10), (-1, -1), CRITERIA)
489
+ cv2.cornerSubPix(self.gray_next, self.features, (10, 10), (-1, -1), CRITERIA)
476
490
 
477
491
  # 有効な特徴点のみ残す
478
492
 
@@ -488,7 +502,7 @@
488
502
 
489
503
  i = 0
490
504
 
491
- while i < len(self.features):
505
+ while i < len(self.features):
492
506
 
493
507
  # 特徴点として認識できず
494
508