質問編集履歴

1

コード

2018/08/06 05:30

投稿

uriuri
uriuri

スコア47

test CHANGED
File without changes
test CHANGED
@@ -1,251 +1,3 @@
1
- opencvで作成した処理をカメラを用いてリアルタイムで処理をおこないと思っています。ここを参考にしました。
2
-
3
- https://qiita.com/hitomatagi/items/12a2eceaf65f142ec3df
4
-
5
-
6
-
7
- ```python
8
-
9
- #coding: Shift_Jis
10
-
11
- import cv2
12
-
13
- import math
14
-
15
- import numpy as np
16
-
17
-
18
-
19
- # cv2.cv.CV_FOURCC
20
-
21
- def cv_fourcc(c1, c2, c3, c4):
22
-
23
- return (ord(c1) & 255) + ((ord(c2) & 255) << 8) + \
24
-
25
- ((ord(c3) & 255) << 16) + ((ord(c4) & 255) << 24)
26
-
27
-
28
-
29
-
30
-
31
- if __name__ == '__main__':
32
-
33
- # 定数定義
34
-
35
- ESC_KEY = 27 # Escキー
36
-
37
- INTERVAL= 33 # 待ち時間 33
38
-
39
- FRAME_RATE = 30 # fps
40
-
41
-
42
-
43
- ORG_WINDOW_NAME = "org"
44
-
45
- GAUSSIAN_WINDOW_NAME = "syori"
46
-
47
-
48
-
49
- GAUSSIAN_FILE_NAME = "syori.avi"
50
-
51
-
52
-
53
- DEVICE_ID = 0
54
-
55
-
56
-
57
- # カメラ映像取得
58
-
59
- cap = cv2.VideoCapture(DEVICE_ID)
60
-
61
-
62
-
63
- # 保存ビデオファイルの準備
64
-
65
- end_flag, c_frame = cap.read()
66
-
67
- height, width, channels = c_frame.shape
68
-
69
- rec = cv2.VideoWriter(GAUSSIAN_FILE_NAME, \
70
-
71
- cv_fourcc('X', 'V', 'I', 'D'), \
72
-
73
- FRAME_RATE, \
74
-
75
- (width, height), \
76
-
77
- True)
78
-
79
-
80
-
81
- # ウィンドウの準備
82
-
83
- cv2.namedWindow(ORG_WINDOW_NAME)
84
-
85
- cv2.namedWindow(GAUSSIAN_WINDOW_NAME)
86
-
87
-
88
-
89
- # 変換処理ループ
90
-
91
- while end_flag == True:
92
-
93
-
94
-
95
- # 入力画像をグレースケール変換
96
-
97
- gray = cv2.cvtColor(c_frame,cv2.COLOR_BGR2GRAY)
98
-
99
- # 二値化
100
-
101
- #ret,th1 = cv2.threshold(gray,200,255,cv2.THRESH_BINARY)
102
-
103
- #適応的しきい値処理
104
-
105
- th1 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
106
-
107
- cv2.THRESH_BINARY,25,10) #初期11,2
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
- #ガウシアンフィルタ処理
116
-
117
- gauss = cv2.GaussianBlur(th1,(9,9),0)
118
-
119
-
120
-
121
- #キャニーエッジ検出
122
-
123
- edges = cv2.Canny(gauss,100,150)
124
-
125
-
126
-
127
- img, contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1)
128
-
129
- for c in contours:
130
-
131
- area = cv2.contourArea(c)
132
-
133
- if area < 200 and 0 < area: #50,0
134
-
135
- continue
136
-
137
- cv2.drawContours(edges, c, -1, (0, 0, 255), cv2.CHAIN_APPROX_TC89_L1)
138
-
139
-
140
-
141
- #LSD生成
142
-
143
- LSD = cv2.createLineSegmentDetector()
144
-
145
-
146
-
147
- #線分検出
148
-
149
- lines, width, prec, nfa = LSD.detect(edges)
150
-
151
-
152
-
153
- # グレースケール変換をBGR変換
154
-
155
- color = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
156
-
157
-
158
-
159
- # 直線の描画
160
-
161
- for i in range(len(lines)):
162
-
163
- for x1,y1,x2,y2 in lines[i] :
164
-
165
- cv2.line(color,(x1,y1),(x2,y2),(0,0,255),2)
166
-
167
-
168
-
169
- #OpenCVがBGRなのでRGBに変換
170
-
171
- disp_in_img = cv2.cvtColor(color, cv2.COLOR_BGR2RGB)
172
-
173
-
174
-
175
- # HSVに変換
176
-
177
- hsv = cv2.cvtColor(disp_in_img, cv2.COLOR_BGR2HSV)
178
-
179
-
180
-
181
- # 白のHSV範囲
182
-
183
- lower_white = np.array([0,0,180]) #0,0,100 #0,0,200
184
-
185
- upper_white = np.array([200,200,250]) #180,30,250 白線とタイル認識 #180,40,250
186
-
187
-
188
-
189
- # 白以外にマスク
190
-
191
- mask_white = cv2.inRange(hsv, lower_white, upper_white)
192
-
193
- res_white = cv2.bitwise_and(c_frame,c_frame, mask= mask_white)
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
- # フレーム表示
202
-
203
- cv2.imshow(ORG_WINDOW_NAME, c_frame)
204
-
205
- cv2.imshow('res',res_white)
206
-
207
-
208
-
209
- cv2.imshow('3', disp_in_img)
210
-
211
- cv2.imshow("1", th1)
212
-
213
- cv2.imshow("2", edges)
214
-
215
- # フレーム書き込み
216
-
217
- rec.write(res_white)
218
-
219
-
220
-
221
- # Escキーで終了
222
-
223
- key = cv2.waitKey(INTERVAL)
224
-
225
- if key == ESC_KEY:
226
-
227
- break
228
-
229
-
230
-
231
- # 次のフレーム読み込み
232
-
233
- end_flag, c_frame = cap.read()
234
-
235
-
236
-
237
- # 終了処理
238
-
239
- cv2.destroyAllWindows()
240
-
241
- cap.release()
242
-
243
- rec.release()
244
-
245
-
246
-
247
- ```
248
-
249
1
  処理が途中でとまり、
250
2
 
251
3
  処理後フォルダにaviファイルは保存されるのですが2秒ほどの動画となってしまいます