回答編集履歴

4

追記

2018/08/22 19:21

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -39,8 +39,6 @@
39
39
  修正版サンプルコードを参考情報として置いておきます。
40
40
 
41
41
  どういう点を修正したのかをコードの差分比較ツールで確認して見てくださいな。
42
-
43
- **ノークレーム・ノーリターンでお願いします。**
44
42
 
45
43
 
46
44
 
@@ -102,7 +100,7 @@
102
100
 
103
101
  end_flag, self.frame = self.video.read()
104
102
 
105
- if not end_flag:
103
+ if not end_flag: # EOF
106
104
 
107
105
  break
108
106
 
@@ -137,8 +135,6 @@
137
135
 
138
136
 
139
137
  def onMouse(self,event, x, y, flag, params):
140
-
141
-
142
138
 
143
139
  if event == cv2.EVENT_MOUSEMOVE: # マウスが移動したときにx線とy線を更新する
144
140
 

3

追記

2018/08/22 19:21

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -57,6 +57,12 @@
57
57
 
58
58
 
59
59
  VIDEO_DATE = 'tennis.AVI'
60
+
61
+ WINDOW_NAME = "MouseEvent"
62
+
63
+
64
+
65
+
60
66
 
61
67
  class PointList():
62
68
 

2

追記

2018/08/22 09:27

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -58,10 +58,6 @@
58
58
 
59
59
  VIDEO_DATE = 'tennis.AVI'
60
60
 
61
- WINDOW_NAME = "MouseEvent"
62
-
63
-
64
-
65
61
  class PointList():
66
62
 
67
63
  def __init__(self, npoints):
@@ -100,13 +96,31 @@
100
96
 
101
97
  end_flag, self.frame = self.video.read()
102
98
 
103
- if not end_flag: # 動画が終わったら
99
+ if not end_flag:
104
100
 
105
101
  break
106
102
 
107
- # 質問文のコードを踏襲するために、onMouseでcv2.imshowとしましたが、
103
+ if(self.pos == self.npoints):
108
104
 
105
+ # コメントアウト
106
+
107
+ #print(self.ptlist)
108
+
109
+ cv2.line(self.frame, (self.ptlist[0][0], self.ptlist[0][1]),
110
+
111
+ (self.ptlist[1][0], self.ptlist[1][1]), (0, 255, 0), 3)
112
+
113
+ cv2.line(self.frame, (self.ptlist[1][0], self.ptlist[1][1]),
114
+
115
+ (self.ptlist[2][0], self.ptlist[2][1]), (0, 255, 0), 3)
116
+
109
- # ベストなコードはこの位置にマウスの座標データを元にしてcv2.circleとcv2.lineを行う事です。
117
+ cv2.line(self.frame, (self.ptlist[2][0], self.ptlist[2][1]),
118
+
119
+ (self.ptlist[3][0], self.ptlist[3][1]), (0, 255, 0), 3)
120
+
121
+ cv2.line(self.frame, (self.ptlist[3][0], self.ptlist[3][1]),
122
+
123
+ (self.ptlist[0][0], self.ptlist[0][1]), (0, 255, 0), 3)
110
124
 
111
125
  cv2.imshow(WINDOW_NAME, self.frame)
112
126
 
@@ -148,30 +162,6 @@
148
162
 
149
163
  print('All points have selected. Press ESC-key.')
150
164
 
151
- if(self.pos == self.npoints):
152
-
153
- print(self.ptlist)
154
-
155
- # ↓はrangeとfor文を使えば4行から減らせると思います。
156
-
157
- cv2.line(self.frame, (self.ptlist[0][0], self.ptlist[0][1]),
158
-
159
- (self.ptlist[1][0], self.ptlist[1][1]), (0, 255, 0), 3)
160
-
161
- cv2.line(self.frame, (self.ptlist[1][0], self.ptlist[1][1]),
162
-
163
- (self.ptlist[2][0], self.ptlist[2][1]), (0, 255, 0), 3)
164
-
165
- cv2.line(self.frame, (self.ptlist[2][0], self.ptlist[2][1]),
166
-
167
- (self.ptlist[3][0], self.ptlist[3][1]), (0, 255, 0), 3)
168
-
169
- cv2.line(self.frame, (self.ptlist[3][0], self.ptlist[3][1]),
170
-
171
- (self.ptlist[0][0], self.ptlist[0][1]), (0, 255, 0), 3)
172
-
173
- # この部分にcv2.imshowがいるような気も。
174
-
175
165
 
176
166
 
177
167
 

1

追記

2018/08/22 09:20

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,4 +1,8 @@
1
1
  質問文の追記ありがとございます。
2
+
3
+
4
+
5
+ ---
2
6
 
3
7
 
4
8
 
@@ -22,17 +26,21 @@
22
26
 
23
27
  ```
24
28
 
25
- 実行時エラーを無くすには上記コードに変更すれば良いですが。
29
+ 実行時エラーを無くすには関連する部分を上記コードに変更すれば良いですが。
30
+
31
+
32
+
33
+ ---
34
+
35
+
26
36
 
27
37
  質問タイトルのやりたい事はこれでは満たせないので、
28
38
 
29
- 修正版サンプルコードを参考情報としていておきます。
39
+ 修正版サンプルコードを参考情報としていておきます。
30
40
 
31
- コードの差分比較ツールなの、修正点を確認しててくださいな。
41
+ どういう点を修正したのかをコードの差分比較ツールで確認しててくださいな。
32
42
 
33
43
  **ノークレーム・ノーリターンでお願いします。**
34
-
35
-
36
44
 
37
45
 
38
46
 
@@ -48,7 +56,7 @@
48
56
 
49
57
 
50
58
 
51
- VIDEO_DATE = 'a.mp4'
59
+ VIDEO_DATE = 'tennis.AVI'
52
60
 
53
61
  WINDOW_NAME = "MouseEvent"
54
62
 
@@ -92,9 +100,13 @@
92
100
 
93
101
  end_flag, self.frame = self.video.read()
94
102
 
95
- if not end_flag:
103
+ if not end_flag: # 動画が終わったら
96
104
 
97
105
  break
106
+
107
+ # 質問文のコードを踏襲するために、onMouseでcv2.imshowとしましたが、
108
+
109
+ # ベストなコードはこの位置にマウスの座標データを元にしてcv2.circleとcv2.lineを行う事です。
98
110
 
99
111
  cv2.imshow(WINDOW_NAME, self.frame)
100
112