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

回答編集履歴

2

d

2018/11/02 04:00

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -72,4 +72,30 @@
72
72
  三角形が赤
73
73
  四角形が緑
74
74
  それ以外が水色
75
- で検出されています。位置ももちろん、取得できます。
75
+ で検出されています。位置ももちろん、取得できます。
76
+
77
+ ## 追記
78
+
79
+ ```python
80
+
81
+ import cv2
82
+
83
+ device_id = 0
84
+ cap = cv2.VideoCapture(device_id)
85
+
86
+ while True:
87
+ # 1フレームずつ取得する。
88
+ ret, frame = cap.read()
89
+ if not ret:
90
+ break # 映像取得に失敗
91
+
92
+ result = detect(frame) # フレームから図形を検出する。
93
+ # 検出結果を使ってなにかする。
94
+
95
+ cv2.imshow('Frame', frame)
96
+ if cv2.waitKey(1) & 0xFF == ord('q'):
97
+ break # q キーを押したら終了する。
98
+
99
+ cap.release()
100
+ cv2.destroyAllWindows()
101
+ ```

1

d

2018/11/02 04:00

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -15,7 +15,61 @@
15
15
 
16
16
  ----
17
17
 
18
- > 幾何学模様が2,3個
18
+ ## 追記
19
19
 
20
+ 輪郭抽出ベースだと以下のような感じになります。
20
- これはのようものなのしょうか?可能でしたら質問欄編集て貼ってください
21
+ 形状が丸、四角、三角、円な単純あれば輪郭抽出ベースのやり方おすすめます
22
+
23
+ ![イメージ説明](c62b61e9a637abaecfc6a2519db18c55.png)
24
+
25
+ ```
26
+ import cv2
27
+ import matplotlib.pyplot as plt
28
+ import numpy as np
29
+
30
+ # 画像を読み込む。
31
+ img = cv2.imread('sample.png')
32
+ img = cv2.flip(img, 1)
33
+
34
+ # 輪郭抽出する。
35
+ gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
36
+ _, contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
37
+
38
+ # 輪郭を近似する。
39
+ approx_contours = []
40
+ for cnt in contours:
41
+ # 輪郭の周囲の長さを計算する。
42
+ arclen = cv2.arcLength(cnt, True)
43
+ # 輪郭を近似する。
44
+ approx_cnt = cv2.approxPolyDP(cnt, epsilon=0.005 * arclen, closed=True)
45
+ approx_contours.append(approx_cnt)
46
+
47
+ # 判定する。
48
+ for cnt in approx_contours:
49
+ num_points = len(cnt)
50
+ cv2.drawContours(img, [cnt], -1, (0, 0, 255), 3)
51
+
52
+ if num_points == 3:
53
+ cv2.drawContours(img, [cnt], -1, (255, 0, 0), 3)
54
+ print('三角形')
55
+ elif num_points == 4:
56
+ cv2.drawContours(img, [cnt], -1, (0, 255, 0), 3)
57
+ print('四角形')
58
+ else:
59
+ cv2.drawContours(img, [cnt], -1, (0, 255, 255), 3)
60
+ print('その他')
61
+
62
+ # 画像を表示する。
63
+ fig, axes = plt.subplots(figsize=(6, 6))
64
+ axes.imshow(img)
65
+ axes.axis('off')
66
+ plt.show()
67
+ ```
68
+
69
+ ![イメージ説明](2ab0af494caf0f04b32579e18c51c5d1.png)
70
+ 結果
71
+
72
+ 三角形が赤
73
+ 四角形が緑
74
+ それ以外が水色
21
- 画像があ具体的なアドバイスができます。
75
+ で検出さています。位置ももちろん取得できます。