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

質問編集履歴

1

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

2018/07/20 16:04

投稿

tasuke
tasuke

スコア53

title CHANGED
File without changes
body CHANGED
@@ -30,4 +30,55 @@
30
30
  正確には以下の写真のようになってしまいます。
31
31
  ![イメージ説明](caab7347443af4dd079af48171ec2a1e.jpeg)
32
32
  画面上に円が現れて消えるまでの時間とは別な時間が返されている気がします。
33
- 私は上記のプログラムで計測している時間はプログラムが円を検出しその円に栓を書くまでの時間のみを計測し表記してしまっているため謎の数値が返されているのではという考えに至りました。実際の理由は何なのでしょうか。また、そもそも上記のような円検出のプログラムに円が現れ消えるまでの時間を測定する能力を付加することは可能なのでしょうか。
33
+ 私は上記のプログラムで計測している時間はプログラムが円を検出しその円に栓を書くまでの時間のみを計測し表記してしまっているため謎の数値が返されているのではという考えに至りました。実際の理由は何なのでしょうか。また、そもそも上記のような円検出のプログラムに円が現れ消えるまでの時間を測定する能力を付加することは可能なのでしょうか。
34
+
35
+
36
+ 追記
37
+ 回答していただいた方のプログラムをもとに、コードを書き直してみました。
38
+ ```python
39
+ import numpy as np
40
+ import cv2
41
+ import time
42
+ cap = cv2.VideoCapture(0)
43
+
44
+ frame = np.zeros((512,512,3), dtype=np.uint8)
45
+ frame[:] = tuple((0,0,0))
46
+
47
+ cur,pre = False,False
48
+ start = time.time()
49
+ while True:
50
+
51
+ ret, frame = cap.read()
52
+ gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
53
+ gray = cv2.GaussianBlur(gray, (33,33), 1)
54
+ circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 60, param1=10, param2=85, minRadius=10, maxRadius=80)
55
+ if circles is not None:
56
+ circles = np.uint16(np.around(circles))
57
+ for i in circles[0,:]:
58
+ cv2.circle(frame,(i[0],i[1]),i[2],(0,0,255),2)
59
+ cv2.circle(frame,(i[0],i[1]),2,(0,0,255),3)
60
+ cur = not pre
61
+ print('circle:{}->{}'.format(pre,cur))
62
+
63
+
64
+ if not pre and cur:
65
+ start = time.time()
66
+
67
+ elif pre and not cur:
68
+ elapsed_time = time.time() - start
69
+ print("elapsed_time:{0}".format(elapsed_time) + "[sec]")
70
+
71
+ pre = cur
72
+
73
+ cv2.imshow('preview', frame)
74
+ key = cv2.waitKey(10)
75
+ if key == ord("q"):
76
+ break
77
+ cv2.destroyAllWindows()
78
+
79
+ コード
80
+ ```
81
+ 起動させた結果、次のような値を取るようになりました。
82
+ ![イメージ説明](9972b4d32f402008e04e41f28cbecd44.jpeg)
83
+  以前よりは数値的には良いものになったのですが、画面上に円を置き続けていても円が消えたと判断されてしまうようです。ただ、Widowsのパソコンに付属しているカメラで撮影していて画像が荒いためか、円を画面上に置き続けていてもcircleが点滅(?)している状態のため、それが原因でプログラムが円が消えたと判断してしまっている可能性も考えました。しかし、私はまだプログラミングを始めて間もないため、実際の原因が何なのか突き止めることが出来ませんでした。教えていただけると助かります。
84
+  文章が長く、またお見苦しいものとなってしまい申し訳ありません。