回答編集履歴

3

update answer

2022/11/02 04:46

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -8,3 +8,39 @@
8
8
  先述の通り,`frame`を`image`として扱うことで輪郭抽出ができるようになります.
9
9
 
10
10
  変数宣言や関数,その他Pythonの基礎について不明なら,[チュートリアル](https://docs.python.org/ja/3/tutorial/)に取り組んで扱いを学んでください.
11
+
12
+ ### 追記
13
+ 1枚だけ保存できれば良いとのことだったのでそれを実現しました.
14
+ ```Python
15
+ import cv2
16
+ import os
17
+
18
+ def writeContour(image):
19
+ gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
20
+ ret, thresh = cv2.threshold(gray_image, 128, 255, cv2.THRESH_BINARY)
21
+ contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
22
+
23
+ cv2.drawContours(image, contours, -1, (0, 255, 0), 2, cv2.LINE_AA)
24
+ return image
25
+
26
+ def save_frame_camera_key(device_num, dir_path, basename, ext='jpg', delay=1, window_name='frame'):
27
+ cap = cv2.VideoCapture(device_num)
28
+
29
+ if not cap.isOpened():
30
+ return False
31
+
32
+ os.makedirs(dir_path, exist_ok=True)
33
+ base_path = os.path.join(dir_path, basename)
34
+
35
+ ret, frame = None, None
36
+
37
+ while not ret:
38
+ ret, frame = cap.read()
39
+ frame = writeContour(frame)
40
+ cv2.imshow(window_name, frame)
41
+ cv2.imwrite(f'{base_path}.{ext}', frame)
42
+ cv2.destroyWindow(window_name)
43
+
44
+ save_frame_camera_key(0, 'syasin', 'IMG_RINKAKU')
45
+ ```
46
+ 依然として質問内容は「やって欲しいことの丸投げ」でしかなかったのですが今後の成長を期待しての解答とします.

2

update context

2022/11/02 02:48

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -4,7 +4,7 @@
4
4
  この映像`frame`に対して輪郭抽出`cv2.findContours()`を行ってください.
5
5
 
6
6
  > 輪郭抽出のソースを追加したら動かないです。
7
- 当たり前ですが,変数`image`は輪郭抽出に関連するコード以前に宣言されておらず,エラーが出ます.
7
+ 変数`image`は輪郭抽出に関連するコード以前に宣言されておらず,エラーが出ます.
8
8
  先述の通り,`frame`を`image`として扱うことで輪郭抽出ができるようになります.
9
9
 
10
- 変数宣言や関数,その他Pythonの基礎について不明なら,[チュートリアル](https://docs.python.org/ja/3/tutorial/)に取り組まれることお勧めします
10
+ 変数宣言や関数,その他Pythonの基礎について不明なら,[チュートリアル](https://docs.python.org/ja/3/tutorial/)に取り組んで扱い学んでください

1

update answer

2022/11/02 02:40

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -2,3 +2,9 @@
2
2
  `save_frame_camera_key()`にてカメラの映像`frame`を取得するものの,それを保存するのみの動作になっています.
3
3
 
4
4
  この映像`frame`に対して輪郭抽出`cv2.findContours()`を行ってください.
5
+
6
+ > 輪郭抽出のソースを追加したら動かないです。
7
+ 当たり前ですが,変数`image`は輪郭抽出に関連するコード以前に宣言されておらず,エラーが出ます.
8
+ 先述の通り,`frame`を`image`として扱うことで輪郭抽出ができるようになります.
9
+
10
+ 変数宣言や関数,その他Pythonの基礎について不明なら,[チュートリアル](https://docs.python.org/ja/3/tutorial/)に取り組まれることをお勧めします.