質問編集履歴
1
ソースコードの変更、画像、エラーコードの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -7,6 +7,40 @@
|
|
7
7
|
動画開始から30フレーム程度は背景画像と全く同じ画像となってしまう(複数動画の処理、背景画像と全く同じ画像となるフレームが一定ではない)ため、その後の処理(重心検出)が通りません。
|
8
8
|
|
9
9
|
背景差分後の画像に物体が映ったときのフレーム以降でその後の処理を行わせる、何フレーム目から物体が映っているのかを調べるためには、どのような方法があるのかご教示いただきたく存じます。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
###追記
|
14
|
+
|
15
|
+
該当ソースコードの修正、画像、エラーコードを追加しました。
|
16
|
+
|
17
|
+
画像は
|
18
|
+
|
19
|
+
一枚目 背景画像とする画像
|
20
|
+
|
21
|
+
二枚目 物体の映った画像(26フレーム目)
|
22
|
+
|
23
|
+
三枚目 物体が映っていないときの背景差分後の画像
|
24
|
+
|
25
|
+
四枚目 物体が映ったときの背景差分後の画像(26フレーム目)
|
26
|
+
|
27
|
+
となっています。
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
改めて、解決したい課題は
|
32
|
+
|
33
|
+
物体が映ったフレーム以降から重心検出の処理を行わせたい
|
34
|
+
|
35
|
+
というものです。
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
私の解釈では、三枚目の画像のようなときは重心検出ができなくてエラーになっているので(そもそもここが間違っていますか?)、物体の映った四枚目のような画像から重心検出を行うことができれば問題なく実行できると考えています。
|
40
|
+
|
41
|
+
物体の映った画像以降から処理を行うためにはどのような手段があるのかを探しています。
|
42
|
+
|
43
|
+
ちなみに重心検出を行う理由は物体の座標を取得するためです。
|
10
44
|
|
11
45
|
|
12
46
|
|
@@ -20,9 +54,13 @@
|
|
20
54
|
|
21
55
|
import numpy as np
|
22
56
|
|
57
|
+
import glob
|
58
|
+
|
59
|
+
import os
|
23
60
|
|
24
61
|
|
62
|
+
|
25
|
-
video_path='
|
63
|
+
video_path='C2278.mp4'
|
26
64
|
|
27
65
|
|
28
66
|
|
@@ -90,6 +128,22 @@
|
|
90
128
|
|
91
129
|
cv2.imwrite('threshold'+str(n).zfill(digit)+'.png',th)
|
92
130
|
|
131
|
+
|
132
|
+
|
133
|
+
#モーメント関数で3次までのモーメントを取得
|
134
|
+
|
135
|
+
mu=cv2.moments(th)
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
#図心を出す。
|
140
|
+
|
141
|
+
x,y= int(mu["m10"]/mu["m00"]) , int(mu["m01"]/mu["m00"])
|
142
|
+
|
143
|
+
print([x,y])
|
144
|
+
|
145
|
+
|
146
|
+
|
93
147
|
else:
|
94
148
|
|
95
149
|
# フレーム画像が読込なかったら終了
|
@@ -103,3 +157,41 @@
|
|
103
157
|
cap.release()
|
104
158
|
|
105
159
|
```
|
160
|
+
|
161
|
+
###エラーコード
|
162
|
+
|
163
|
+
```
|
164
|
+
|
165
|
+
---------------------------------------------------------------------------
|
166
|
+
|
167
|
+
ZeroDivisionError Traceback (most recent call last)
|
168
|
+
|
169
|
+
<ipython-input-4-a8ed6c71b0f4> in <module>
|
170
|
+
|
171
|
+
44
|
172
|
+
|
173
|
+
45 #図心を出す。
|
174
|
+
|
175
|
+
---> 46 x,y= int(mu["m10"]/mu["m00"]) , int(mu["m01"]/mu["m00"])
|
176
|
+
|
177
|
+
47 print([x,y])
|
178
|
+
|
179
|
+
48 else:
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
ZeroDivisionError: float division by zero
|
184
|
+
|
185
|
+
```
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
###画像
|
190
|
+
|
191
|
+
![イメージ説明](ce2343613a856e2773e2cc738621c184.png)
|
192
|
+
|
193
|
+
![イメージ説明](d9ef9ea3fc8b6af14c7ab8420a089528.png)
|
194
|
+
|
195
|
+
![イメージ説明](7ab82fa6b15f6d3ce5045bde323b646f.png)
|
196
|
+
|
197
|
+
![イメージ説明](1851f2bb9d8115df463ec06595194c66.png)
|