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

回答編集履歴

2

タイムアウト修正

2019/07/12 15:58

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -31,9 +31,10 @@
31
31
  if key == ord('q'):
32
32
  break
33
33
  endtime = time.time()
34
- if (endtime - starttime) * 1000 < wait:
34
+ elapse = int((endtime - starttime) * 1000)
35
+ if elapse < wait:
35
36
  # 他のキーで抜けてきた場合はタイムアウト時間を補正
36
- wait -= (endtime - starttime) * 1000
37
+ wait -= elapse
37
38
  else:
38
39
  cv2.imwrite('{}_{}.{}'.format(base_path, n, ext), frame)
39
40
  n += 1

1

タイムアウト修正

2019/07/12 15:58

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -12,4 +12,32 @@
12
12
  cv2.imwrite('{}_{}.{}'.format(base_path, n, ext), frame)
13
13
  n += 1
14
14
  ```
15
- とすればよいのでは?
15
+ とすればよいのでは?
16
+
17
+ (追記)
18
+ 上記だとq以外のキーを押すと指定時間経過前に次の撮影をしてしまいますね。
19
+ 他のキーを押された場合は指定時間経過まで待つなら、
20
+ ```Python
21
+ import time
22
+ ```
23
+ を追加して
24
+ ```Python
25
+ starttime = time.time()
26
+ wait = delay
27
+ while True:
28
+ ret, frame = cap.read()
29
+ cv2.imshow(window_name, frame)
30
+ key = cv2.waitKey(wait) & 0xFF
31
+ if key == ord('q'):
32
+ break
33
+ endtime = time.time()
34
+ if (endtime - starttime) * 1000 < wait:
35
+ # 他のキーで抜けてきた場合はタイムアウト時間を補正
36
+ wait -= (endtime - starttime) * 1000
37
+ else:
38
+ cv2.imwrite('{}_{}.{}'.format(base_path, n, ext), frame)
39
+ n += 1
40
+ starttime = time.time()
41
+ wait = delay
42
+ ```
43
+ といったところでしょうか。