回答編集履歴

4

修正

2018/06/11 14:17

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,22 +1,24 @@
1
- while True の代わり、[itertools.count](https://docs.python.jp/3/library/itertools.html#itertools.count)を使うでしょう。
1
+ > キーを押すごと撮影した画像をsampleフォルダに連番ファイルして保存した
2
+
3
+
4
+
5
+ カウンタ変数iを用意するのが自然でしょうね。
2
6
 
3
7
  ```Python
4
8
 
5
- from itertools import count
9
+ i = 0
6
10
 
7
-
8
-
9
- ...
10
-
11
-
12
-
13
- for i in count():
11
+ while True:
14
12
 
15
13
  ...
16
14
 
17
15
 
18
16
 
17
+ if cv2.waitKey(33) >= -1:
18
+
19
- cv2.imwrite(f'sample/{i:03d}.png', image)
19
+ cv2.imwrite(f'image/{i:03d}.png', image)
20
+
21
+ i += 1
20
22
 
21
23
  ```
22
24
 
@@ -39,6 +41,46 @@
39
41
  if ret == False: # ここも単に not ret で良い
40
42
 
41
43
  break
44
+
45
+ ```
46
+
47
+
48
+
49
+ 旧回答
50
+
51
+ ---
52
+
53
+ **註:**
54
+
55
+ コードの仕様を勘違いして書いた回答です。
56
+
57
+ 勘違いとは言え全く参考にならないわけではないですから、このような形で残しておきます。
58
+
59
+
60
+
61
+ ---
62
+
63
+
64
+
65
+ while True の代わりに、[itertools.count](https://docs.python.jp/3/library/itertools.html#itertools.count)を使うと良いでしょう。
66
+
67
+ ```Python
68
+
69
+ from itertools import count
70
+
71
+
72
+
73
+ ...
74
+
75
+
76
+
77
+ for i in count():
78
+
79
+ ...
80
+
81
+
82
+
83
+ cv2.imwrite(f'sample/{i:03d}.png', image)
42
84
 
43
85
  ```
44
86
 

3

追記

2018/06/11 14:17

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -41,3 +41,29 @@
41
41
  break
42
42
 
43
43
  ```
44
+
45
+
46
+
47
+ ---
48
+
49
+ 気付いたのでもう一か所。画像を保存するタイミングが謎です。
50
+
51
+ > ```Python
52
+
53
+ if cv2.waitKey(33) >= 0:
54
+
55
+ > ```
56
+
57
+
58
+
59
+ このコードですと、33ミリ秒ごとに何かしらのキーを連打しないと保存が効かないですね。
60
+
61
+ 特定のキーの押下による脱出を検討しないなら、if文はそもそも不要です。
62
+
63
+ ```Python
64
+
65
+ cv2.waitKey(33)
66
+
67
+ cv2.imwrite(...)
68
+
69
+ ```

2

追記

2018/06/11 10:27

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -16,6 +16,28 @@
16
16
 
17
17
 
18
18
 
19
- cv2.imwrite(f'sample/{i}.png', image)
19
+ cv2.imwrite(f'sample/{i:03d}.png', image)
20
20
 
21
21
  ```
22
+
23
+
24
+
25
+ ところで
26
+
27
+ ---
28
+
29
+ ご提示のコードですが、正常なルートでループを脱出できないですね。
30
+
31
+ たとえWebカメラの接続を引っこ抜いたとしてもループが空回りし続けます。
32
+
33
+
34
+
35
+ ループを抜けたいのならcontinueではなくbreakを使ってください。
36
+
37
+ ```Python
38
+
39
+ if ret == False: # ここも単に not ret で良い
40
+
41
+ break
42
+
43
+ ```

1

リンクの追加

2018/06/11 09:56

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,4 +1,4 @@
1
- while True の代わりに、itertools.countを使うと良いでしょう。
1
+ while True の代わりに、[itertools.count](https://docs.python.jp/3/library/itertools.html#itertools.count)を使うと良いでしょう。
2
2
 
3
3
  ```Python
4
4