質問編集履歴

1

回答していただいた方のプログラムを参考にし、プログラムを書き直してみました。

2018/07/20 16:04

投稿

tasuke
tasuke

スコア53

test CHANGED
File without changes
test CHANGED
@@ -63,3 +63,105 @@
63
63
  画面上に円が現れて消えるまでの時間とは別な時間が返されている気がします。
64
64
 
65
65
  私は上記のプログラムで計測している時間はプログラムが円を検出しその円に栓を書くまでの時間のみを計測し表記してしまっているため謎の数値が返されているのではという考えに至りました。実際の理由は何なのでしょうか。また、そもそも上記のような円検出のプログラムに円が現れ消えるまでの時間を測定する能力を付加することは可能なのでしょうか。
66
+
67
+
68
+
69
+
70
+
71
+ 追記
72
+
73
+ 回答していただいた方のプログラムをもとに、コードを書き直してみました。
74
+
75
+ ```python
76
+
77
+ import numpy as np
78
+
79
+ import cv2
80
+
81
+ import time
82
+
83
+ cap = cv2.VideoCapture(0)
84
+
85
+
86
+
87
+ frame = np.zeros((512,512,3), dtype=np.uint8)
88
+
89
+ frame[:] = tuple((0,0,0))
90
+
91
+
92
+
93
+ cur,pre = False,False
94
+
95
+ start = time.time()
96
+
97
+ while True:
98
+
99
+
100
+
101
+ ret, frame = cap.read()
102
+
103
+ gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
104
+
105
+ gray = cv2.GaussianBlur(gray, (33,33), 1)
106
+
107
+ circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 60, param1=10, param2=85, minRadius=10, maxRadius=80)
108
+
109
+ if circles is not None:
110
+
111
+ circles = np.uint16(np.around(circles))
112
+
113
+ for i in circles[0,:]:
114
+
115
+ cv2.circle(frame,(i[0],i[1]),i[2],(0,0,255),2)
116
+
117
+ cv2.circle(frame,(i[0],i[1]),2,(0,0,255),3)
118
+
119
+ cur = not pre
120
+
121
+ print('circle:{}->{}'.format(pre,cur))
122
+
123
+
124
+
125
+
126
+
127
+ if not pre and cur:
128
+
129
+ start = time.time()
130
+
131
+
132
+
133
+ elif pre and not cur:
134
+
135
+ elapsed_time = time.time() - start
136
+
137
+ print("elapsed_time:{0}".format(elapsed_time) + "[sec]")
138
+
139
+
140
+
141
+ pre = cur
142
+
143
+
144
+
145
+ cv2.imshow('preview', frame)
146
+
147
+ key = cv2.waitKey(10)
148
+
149
+ if key == ord("q"):
150
+
151
+ break
152
+
153
+ cv2.destroyAllWindows()
154
+
155
+
156
+
157
+ コード
158
+
159
+ ```
160
+
161
+ 起動させた結果、次のような値を取るようになりました。
162
+
163
+ ![イメージ説明](9972b4d32f402008e04e41f28cbecd44.jpeg)
164
+
165
+  以前よりは数値的には良いものになったのですが、画面上に円を置き続けていても円が消えたと判断されてしまうようです。ただ、Widowsのパソコンに付属しているカメラで撮影していて画像が荒いためか、円を画面上に置き続けていてもcircleが点滅(?)している状態のため、それが原因でプログラムが円が消えたと判断してしまっている可能性も考えました。しかし、私はまだプログラミングを始めて間もないため、実際の原因が何なのか突き止めることが出来ませんでした。教えていただけると助かります。
166
+
167
+  文章が長く、またお見苦しいものとなってしまい申し訳ありません。