質問編集履歴

5

2021/11/23 11:55

投稿

gknjnjtnj
gknjnjtnj

スコア7

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

2021/11/23 11:55

投稿

gknjnjtnj
gknjnjtnj

スコア7

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

修正が必要な部分の明示

2021/11/23 11:49

投稿

gknjnjtnj
gknjnjtnj

スコア7

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

インデントの修正

2021/11/23 11:45

投稿

gknjnjtnj
gknjnjtnj

スコア7

test CHANGED
File without changes
test CHANGED
@@ -30,92 +30,92 @@
30
30
 
31
31
  cap = cv2.VideoCapture(0)
32
32
 
33
- cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
33
+ cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
34
34
 
35
- cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
35
+ cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
36
36
 
37
- fgbg = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=16, detectShadows=True)
37
+ fgbg = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=16, detectShadows=True)
38
38
 
39
- red_mask = np.full((1, 1, 3), (0,0,255), dtype=np.uint8)
39
+ red_mask = np.full((1, 1, 3), (0,0,255), dtype=np.uint8)
40
40
 
41
- white_mask = np.full((REGION_HIGH, REGION_WIDTH, 3), (255,255,255), dtype=np.uint8)
41
+ white_mask = np.full((REGION_HIGH, REGION_WIDTH, 3), (255,255,255), dtype=np.uint8)
42
42
 
43
43
 
44
44
 
45
- while(True):
45
+ while(True):
46
46
 
47
- ret, frame = cap.read()
47
+ ret, frame = cap.read()
48
48
 
49
- rows, cols, channels = frame.shape#この行がエラーメッセージで表示されます
49
+ rows, cols, channels = frame.shape#この行がエラーメッセージで表示されます
50
50
 
51
- # maskを定義
51
+ # maskを定義
52
52
 
53
- laplacian_mask = np.zeros((rows, cols, channels), dtype=np.uint8)
53
+ laplacian_mask = np.zeros((rows, cols, channels), dtype=np.uint8)
54
54
 
55
- fgmask_mask = np.zeros((rows, cols, channels), dtype=np.uint8)
55
+ fgmask_mask = np.zeros((rows, cols, channels), dtype=np.uint8)
56
56
 
57
57
 
58
58
 
59
- frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
59
+ frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
60
60
 
61
- laplacian = cv2.Laplacian(frame_gray, cv2.CV_64F)
61
+ laplacian = cv2.Laplacian(frame_gray, cv2.CV_64F)
62
62
 
63
- for y in range(rows):
63
+ for y in range(rows):
64
64
 
65
- for x in range(cols):
65
+ for x in range(cols):
66
66
 
67
- if laplacian[y,x] > 10:
67
+ if laplacian[y,x] > 10:
68
68
 
69
- laplacian_mask[y,x] = np.copy(red_mask)
69
+ laplacian_mask[y,x] = np.copy(red_mask)
70
70
 
71
71
 
72
72
 
73
-                 #ここから自分が手をつけました
73
+          #ここから自分が手をつけました
74
74
 
75
- fgmask = fgbg.apply(frame)
75
+ fgmask = fgbg.apply(frame)
76
76
 
77
- fgmask_sum = np.zeros((30,40))
77
+ fgmask_sum = np.zeros((30,40))
78
78
 
79
- for i in range(int(rows/REGION_HIGH)):
79
+ for i in range(int(rows/REGION_HIGH)):
80
80
 
81
- for j in range(int(cols/REGION_WIDTH)):
81
+ for j in range(int(cols/REGION_WIDTH)):
82
82
 
83
- for y in range(REGION_HIGH):
83
+ for y in range(REGION_HIGH):
84
84
 
85
- for x in range(REGION_WIDTH):
85
+ for x in range(REGION_WIDTH):
86
86
 
87
- if (fgmask[i*16+y][j*16+x]==255):
87
+ if (fgmask[i*16+y][j*16+x]==255):
88
88
 
89
- fgmask_sum[y,x] += 1
89
+ fgmask_sum[y,x] += 1
90
90
 
91
- fgmask_mean = np.sum(fgmask_sum)/30*40
91
+ fgmask_mean = np.sum(fgmask_sum)/30*40
92
92
 
93
- for y in range(int(rows/REGION_HIGH)):
93
+ for y in range(int(rows/REGION_HIGH)):
94
94
 
95
- for x in range(int(cols/REGION_WIDTH)):
95
+ for x in range(int(cols/REGION_WIDTH)):
96
96
 
97
- if fgmask_sum[x][y] >= fgmask_mean:
97
+ if fgmask_sum[x][y] >= fgmask_mean:
98
98
 
99
- fgmask_mask[16*y:16*y+16,16*x:16*x+16] = np.copy(white_mask)
99
+ fgmask_mask[16*y:16*y+16,16*x:16*x+16] = np.copy(white_mask)
100
100
 
101
101
 
102
102
 
103
- mask_or = cv2.bitwise_or(laplacian_mask, fgmask_mask)
103
+ mask_or = cv2.bitwise_or(laplacian_mask, fgmask_mask)
104
104
 
105
- masked_frame = cv2.bitwise_and(frame, mask_or)
105
+ masked_frame = cv2.bitwise_and(frame, mask_or)
106
106
 
107
- cv2.imshow('frame', masked_frame)
107
+ cv2.imshow('frame', masked_frame)
108
108
 
109
109
 
110
110
 
111
- k = cv2.waitKey(30) & 0xff
111
+ k = cv2.waitKey(30) & 0xff
112
112
 
113
- if k == 27:
113
+ if k == 27:
114
114
 
115
- break # 'ESC' key is pressed
115
+ break # 'ESC' key is pressed
116
116
 
117
- cap.release()
117
+ cap.release()
118
118
 
119
- cv2.destroyAllWindows()
119
+ cv2.destroyAllWindows()
120
120
 
121
121
  ```

1

前提の修正

2021/11/23 11:30

投稿

gknjnjtnj
gknjnjtnj

スコア7

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