回答編集履歴
3
update answer
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
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
この映像`frame`に対して輪郭抽出`cv2.findContours()`を行ってください.
|
5
5
|
|
6
6
|
> 輪郭抽出のソースを追加したら動かないです。
|
7
|
-
|
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
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/)に取り組まれることをお勧めします.
|