teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記

2018/08/22 19:21

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -19,7 +19,6 @@
19
19
  質問タイトルのやりたい事はこれでは満たせないので、
20
20
  修正版サンプルコードを参考情報として置いておきます。
21
21
  どういう点を修正したのかをコードの差分比較ツールで確認して見てくださいな。
22
- **ノークレーム・ノーリターンでお願いします。**
23
22
 
24
23
  ```Python
25
24
  # -*- coding: utf-8 -*-
@@ -50,7 +49,7 @@
50
49
  def run(self):
51
50
  while(self.video.isOpened()):
52
51
  end_flag, self.frame = self.video.read()
53
- if not end_flag:
52
+ if not end_flag: # EOF
54
53
  break
55
54
  if(self.pos == self.npoints):
56
55
  # コメントアウト
@@ -68,7 +67,6 @@
68
67
  break
69
68
 
70
69
  def onMouse(self,event, x, y, flag, params):
71
-
72
70
  if event == cv2.EVENT_MOUSEMOVE: # マウスが移動したときにx線とy線を更新する
73
71
  self.frame2 = np.copy(self.frame)
74
72
  h, w = self.frame2.shape[0], self.frame2.shape[1]

3

追記

2018/08/22 19:21

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -28,6 +28,9 @@
28
28
 
29
29
 
30
30
  VIDEO_DATE = 'tennis.AVI'
31
+ WINDOW_NAME = "MouseEvent"
32
+
33
+
31
34
  class PointList():
32
35
  def __init__(self, npoints):
33
36
  self.video = cv2.VideoCapture(VIDEO_DATE)

2

追記

2018/08/22 09:27

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -28,8 +28,6 @@
28
28
 
29
29
 
30
30
  VIDEO_DATE = 'tennis.AVI'
31
- WINDOW_NAME = "MouseEvent"
32
-
33
31
  class PointList():
34
32
  def __init__(self, npoints):
35
33
  self.video = cv2.VideoCapture(VIDEO_DATE)
@@ -49,10 +47,19 @@
49
47
  def run(self):
50
48
  while(self.video.isOpened()):
51
49
  end_flag, self.frame = self.video.read()
52
- if not end_flag: # 動画が終わったら
50
+ if not end_flag:
53
51
  break
54
- # 質問文のコードを踏襲するために、onMouseでcv2.imshowとしましたが、
52
+ if(self.pos == self.npoints):
53
+ # コメントアウト
54
+ #print(self.ptlist)
55
+ cv2.line(self.frame, (self.ptlist[0][0], self.ptlist[0][1]),
56
+ (self.ptlist[1][0], self.ptlist[1][1]), (0, 255, 0), 3)
57
+ cv2.line(self.frame, (self.ptlist[1][0], self.ptlist[1][1]),
58
+ (self.ptlist[2][0], self.ptlist[2][1]), (0, 255, 0), 3)
55
- # ベストなコードはこの位置にマウスの座標データを元にしてcv2.circleとcv2.lineを行う事です。
59
+ cv2.line(self.frame, (self.ptlist[2][0], self.ptlist[2][1]),
60
+ (self.ptlist[3][0], self.ptlist[3][1]), (0, 255, 0), 3)
61
+ cv2.line(self.frame, (self.ptlist[3][0], self.ptlist[3][1]),
62
+ (self.ptlist[0][0], self.ptlist[0][1]), (0, 255, 0), 3)
56
63
  cv2.imshow(WINDOW_NAME, self.frame)
57
64
  if cv2.waitKey(10) ==27: # Escキーで抜ける
58
65
  break
@@ -73,18 +80,6 @@
73
80
  cv2.imshow(WINDOW_NAME, self.frame)
74
81
  else:
75
82
  print('All points have selected. Press ESC-key.')
76
- if(self.pos == self.npoints):
77
- print(self.ptlist)
78
- # ↓はrangeとfor文を使えば4行から減らせると思います。
79
- cv2.line(self.frame, (self.ptlist[0][0], self.ptlist[0][1]),
80
- (self.ptlist[1][0], self.ptlist[1][1]), (0, 255, 0), 3)
81
- cv2.line(self.frame, (self.ptlist[1][0], self.ptlist[1][1]),
82
- (self.ptlist[2][0], self.ptlist[2][1]), (0, 255, 0), 3)
83
- cv2.line(self.frame, (self.ptlist[2][0], self.ptlist[2][1]),
84
- (self.ptlist[3][0], self.ptlist[3][1]), (0, 255, 0), 3)
85
- cv2.line(self.frame, (self.ptlist[3][0], self.ptlist[3][1]),
86
- (self.ptlist[0][0], self.ptlist[0][1]), (0, 255, 0), 3)
87
- # この部分にcv2.imshowがいるような気も。
88
83
 
89
84
 
90
85
  if __name__ == '__main__':

1

追記

2018/08/22 09:20

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -1,5 +1,7 @@
1
1
  質問文の追記ありがとございます。
2
2
 
3
+ ---
4
+
3
5
  > NameError: name 'self' is not defined
4
6
 
5
7
  Google翻訳
@@ -10,20 +12,22 @@
10
12
  ptlist = PointList(npoints)
11
13
  cv2.setMouseCallback(wname, onMouse, [wname, ptlist.frame, ptlist])
12
14
  ```
13
- 実行時エラーを無くすには上記コードに変更すれば良いですが。
15
+ 実行時エラーを無くすには関連する部分を上記コードに変更すれば良いですが。
16
+
17
+ ---
18
+
14
19
  質問タイトルのやりたい事はこれでは満たせないので、
15
- 修正版サンプルコードを参考情報としていておきます。
20
+ 修正版サンプルコードを参考情報としていておきます。
16
- コードの差分比較ツールなの、修正点を確認しててくださいな。
21
+ どういう点を修正したのかをコードの差分比較ツールで確認しててくださいな。
17
22
  **ノークレーム・ノーリターンでお願いします。**
18
23
 
19
-
20
24
  ```Python
21
25
  # -*- coding: utf-8 -*-
22
26
  import numpy as np
23
27
  import cv2
24
28
 
25
29
 
26
- VIDEO_DATE = 'a.mp4'
30
+ VIDEO_DATE = 'tennis.AVI'
27
31
  WINDOW_NAME = "MouseEvent"
28
32
 
29
33
  class PointList():
@@ -45,8 +49,10 @@
45
49
  def run(self):
46
50
  while(self.video.isOpened()):
47
51
  end_flag, self.frame = self.video.read()
48
- if not end_flag:
52
+ if not end_flag: # 動画が終わったら
49
53
  break
54
+ # 質問文のコードを踏襲するために、onMouseでcv2.imshowとしましたが、
55
+ # ベストなコードはこの位置にマウスの座標データを元にしてcv2.circleとcv2.lineを行う事です。
50
56
  cv2.imshow(WINDOW_NAME, self.frame)
51
57
  if cv2.waitKey(10) ==27: # Escキーで抜ける
52
58
  break