質問編集履歴

2

コード

2018/08/06 05:28

投稿

uriuri
uriuri

スコア47

test CHANGED
File without changes
test CHANGED
@@ -1,121 +1,3 @@
1
- opencvを用いて白線検出しようと考えています。
2
-
3
- ```python
4
-
5
- #coding: Shift_Jis
6
-
7
- import cv2
8
-
9
- import math
10
-
11
- import numpy as np
12
-
13
-
14
-
15
- img_src = cv2.imread("/image.ppm")
16
-
17
- # 入力画像をグレースケール変換
18
-
19
- gray = cv2.cvtColor(img_src,cv2.COLOR_BGR2GRAY)
20
-
21
-
22
-
23
- #適応的しきい値処理
24
-
25
- th1 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
26
-
27
- cv2.THRESH_BINARY,25,10) #初期11,2
28
-
29
-
30
-
31
- #ガウシアンフィルタ処理
32
-
33
- gauss = cv2.GaussianBlur(th1,(9,9),0)
34
-
35
-
36
-
37
- #キャニーエッジ検出
38
-
39
- edges = cv2.Canny(gauss,100,150)
40
-
41
-
42
-
43
- img, contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1)
44
-
45
- for c in contours:
46
-
47
- area = cv2.contourArea(c)
48
-
49
- if area < 90 and 0 < area:
50
-
51
- continue
52
-
53
- #近似部分
54
-
55
- sepsilon = 0.01 * cv2.arcLength(c, True)
56
-
57
- approx = cv2.approxPolyDP(c, epsilon, True)
58
-
59
-
60
-
61
- cv2.drawContours(edges, c, -1, (0, 0, 255), cv2.CHAIN_APPROX_TC89_L1)
62
-
63
-
64
-
65
- #LSD生成
66
-
67
- LSD = cv2.createLineSegmentDetector()
68
-
69
-
70
-
71
- #線分検出
72
-
73
- lines, width, prec, nfa = LSD.detect(edges)
74
-
75
-
76
-
77
- # グレースケール変換をBGR変換
78
-
79
- color = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
80
-
81
-
82
-
83
- # 直線の描画
84
-
85
- for i in range(len(lines)):
86
-
87
- for x1,y1,x2,y2 in lines[i] :
88
-
89
- cv2.line(color,(x1,y1),(x2,y2),(0,0,255),2)
90
-
91
-
92
-
93
- #OpenCVがBGRなのでRGBに変換
94
-
95
- disp_in_img = cv2.cvtColor(color, cv2.COLOR_BGR2RGB)
96
-
97
-
98
-
99
- cv2.imshow('src', img_src)
100
-
101
- cv2.imshow('dst', disp_in_img)
102
-
103
- cv2.imshow("1", th1)
104
-
105
- cv2.imshow("2", edges)
106
-
107
-
108
-
109
- cv2.waitKey()
110
-
111
- cv2.destroyAllWindows()
112
-
113
-
114
-
115
- ```
116
-
117
- 日差しを白線として検出してしまい
118
-
119
1
  ![イメージ説明](c49a6f085a15db9e811a87cf3d2c6fc7.jpeg)
120
2
 
121
3
  ![イメージ説明](b7e2226c5f64c632c20eb3f0c3ff96c5.jpeg)

1

回答に対しての処理画像追加

2018/08/06 05:28

投稿

uriuri
uriuri

スコア47

test CHANGED
File without changes
test CHANGED
@@ -129,3 +129,19 @@
129
129
  これらを輪郭近似し取得した輪郭の頂点を元に面積が一定以上の大きさのところだけ取り出すことで日差しの部分をカットできるのではないかと思ったのですがどのように取り組んでいいか悩んでいます。
130
130
 
131
131
  アドバイスをいただけると幸いです。
132
+
133
+
134
+
135
+ <umyuさんの回答を参考に>
136
+
137
+ 画像が表示されなかったのでこちらに
138
+
139
+ ![イメージ説明](e52e19dc0a07c13b100089749ccdfdef.jpeg)
140
+
141
+
142
+
143
+ ![イメージ説明](c95c689a677695a8427298a50bad6c15.jpeg)
144
+
145
+
146
+
147
+ ![イメージ説明](50bf77b3b933fca476cef0c1453f9842.jpeg)