質問編集履歴
5
1
test
CHANGED
File without changes
|
test
CHANGED
@@ -27,6 +27,18 @@
|
|
27
27
|
|
28
28
|
|
29
29
|
```python
|
30
|
+
|
31
|
+
import numpy as np
|
32
|
+
|
33
|
+
import cv2
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
REGION_WIDTH=16
|
38
|
+
|
39
|
+
REGION_HIGH=16
|
40
|
+
|
41
|
+
|
30
42
|
|
31
43
|
cap = cv2.VideoCapture(0)
|
32
44
|
|
4
1
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
pythonでpcカメラで動画を撮影し、縦横16pxごとに区切って、
|
5
|
+
pythonでpcカメラで動画を撮影し、縦横16pxごとに区切って、勾配計算をした画像(laplacian)と背景差分計算をした画像(fgmask)を作っています。背景は黒くマスクしてエッジを赤くするプログラムを作っています。
|
6
6
|
|
7
7
|
自分が手をつけたのはfgmask = fgbg.apply(frame)以降なので、そのどこかに間違いがあるはずですが、エラーメッセージが下記のものが表示されてしまいます。
|
8
8
|
|
3
修正が必要な部分の明示
test
CHANGED
File without changes
|
test
CHANGED
@@ -98,6 +98,8 @@
|
|
98
98
|
|
99
99
|
fgmask_mask[16*y:16*y+16,16*x:16*x+16] = np.copy(white_mask)
|
100
100
|
|
101
|
+
#ここまでの自分が手をつけた部分を消すとエラーは発生しません
|
102
|
+
|
101
103
|
|
102
104
|
|
103
105
|
mask_or = cv2.bitwise_or(laplacian_mask, fgmask_mask)
|
2
インデントの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -30,92 +30,92 @@
|
|
30
30
|
|
31
31
|
cap = cv2.VideoCapture(0)
|
32
32
|
|
33
|
-
|
33
|
+
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
|
34
34
|
|
35
|
-
|
35
|
+
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
|
36
36
|
|
37
|
-
|
37
|
+
fgbg = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=16, detectShadows=True)
|
38
38
|
|
39
|
-
|
39
|
+
red_mask = np.full((1, 1, 3), (0,0,255), dtype=np.uint8)
|
40
40
|
|
41
|
-
|
41
|
+
white_mask = np.full((REGION_HIGH, REGION_WIDTH, 3), (255,255,255), dtype=np.uint8)
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
-
|
45
|
+
while(True):
|
46
46
|
|
47
|
-
|
47
|
+
ret, frame = cap.read()
|
48
48
|
|
49
|
-
|
49
|
+
rows, cols, channels = frame.shape#この行がエラーメッセージで表示されます
|
50
50
|
|
51
|
-
|
51
|
+
# maskを定義
|
52
52
|
|
53
|
-
|
53
|
+
laplacian_mask = np.zeros((rows, cols, channels), dtype=np.uint8)
|
54
54
|
|
55
|
-
|
55
|
+
fgmask_mask = np.zeros((rows, cols, channels), dtype=np.uint8)
|
56
56
|
|
57
57
|
|
58
58
|
|
59
|
-
|
59
|
+
frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
60
60
|
|
61
|
-
|
61
|
+
laplacian = cv2.Laplacian(frame_gray, cv2.CV_64F)
|
62
62
|
|
63
|
-
|
63
|
+
for y in range(rows):
|
64
64
|
|
65
|
-
|
65
|
+
for x in range(cols):
|
66
66
|
|
67
|
-
|
67
|
+
if laplacian[y,x] > 10:
|
68
68
|
|
69
|
-
|
69
|
+
laplacian_mask[y,x] = np.copy(red_mask)
|
70
70
|
|
71
71
|
|
72
72
|
|
73
|
-
|
73
|
+
#ここから自分が手をつけました
|
74
74
|
|
75
|
-
|
75
|
+
fgmask = fgbg.apply(frame)
|
76
76
|
|
77
|
-
|
77
|
+
fgmask_sum = np.zeros((30,40))
|
78
78
|
|
79
|
-
|
79
|
+
for i in range(int(rows/REGION_HIGH)):
|
80
80
|
|
81
|
-
|
81
|
+
for j in range(int(cols/REGION_WIDTH)):
|
82
82
|
|
83
|
-
|
83
|
+
for y in range(REGION_HIGH):
|
84
84
|
|
85
|
-
|
85
|
+
for x in range(REGION_WIDTH):
|
86
86
|
|
87
|
-
|
87
|
+
if (fgmask[i*16+y][j*16+x]==255):
|
88
88
|
|
89
|
-
|
89
|
+
fgmask_sum[y,x] += 1
|
90
90
|
|
91
|
-
|
91
|
+
fgmask_mean = np.sum(fgmask_sum)/30*40
|
92
92
|
|
93
|
-
|
93
|
+
for y in range(int(rows/REGION_HIGH)):
|
94
94
|
|
95
|
-
|
95
|
+
for x in range(int(cols/REGION_WIDTH)):
|
96
96
|
|
97
|
-
|
97
|
+
if fgmask_sum[x][y] >= fgmask_mean:
|
98
98
|
|
99
|
-
|
99
|
+
fgmask_mask[16*y:16*y+16,16*x:16*x+16] = np.copy(white_mask)
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
-
|
103
|
+
mask_or = cv2.bitwise_or(laplacian_mask, fgmask_mask)
|
104
104
|
|
105
|
-
|
105
|
+
masked_frame = cv2.bitwise_and(frame, mask_or)
|
106
106
|
|
107
|
-
|
107
|
+
cv2.imshow('frame', masked_frame)
|
108
108
|
|
109
109
|
|
110
110
|
|
111
|
-
|
111
|
+
k = cv2.waitKey(30) & 0xff
|
112
112
|
|
113
|
-
|
113
|
+
if k == 27:
|
114
114
|
|
115
|
-
|
115
|
+
break # 'ESC' key is pressed
|
116
116
|
|
117
|
-
|
117
|
+
cap.release()
|
118
118
|
|
119
|
-
|
119
|
+
cv2.destroyAllWindows()
|
120
120
|
|
121
121
|
```
|
1
前提の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
pythonでpcカメラで撮影して
|
5
|
+
pythonでpcカメラで動画を撮影し、縦横16pxごとに区切って、動いているものはそのまま、動いていないものは黒くマスクしてエッジを赤くするプログラムを作っています。
|
6
6
|
|
7
7
|
自分が手をつけたのはfgmask = fgbg.apply(frame)以降なので、そのどこかに間違いがあるはずですが、エラーメッセージが下記のものが表示されてしまいます。
|
8
8
|
|