teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

コード

2018/08/06 05:28

投稿

uriuri
uriuri

スコア47

title CHANGED
File without changes
body CHANGED
@@ -1,62 +1,3 @@
1
- opencvを用いて白線検出しようと考えています。
2
- ```python
3
- #coding: Shift_Jis
4
- import cv2
5
- import math
6
- import numpy as np
7
-
8
- img_src = cv2.imread("/image.ppm")
9
- # 入力画像をグレースケール変換
10
- gray = cv2.cvtColor(img_src,cv2.COLOR_BGR2GRAY)
11
-
12
- #適応的しきい値処理
13
- th1 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
14
- cv2.THRESH_BINARY,25,10) #初期11,2
15
-
16
- #ガウシアンフィルタ処理
17
- gauss = cv2.GaussianBlur(th1,(9,9),0)
18
-
19
- #キャニーエッジ検出
20
- edges = cv2.Canny(gauss,100,150)
21
-
22
- img, contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1)
23
- for c in contours:
24
- area = cv2.contourArea(c)
25
- if area < 90 and 0 < area:
26
- continue
27
- #近似部分
28
- sepsilon = 0.01 * cv2.arcLength(c, True)
29
- approx = cv2.approxPolyDP(c, epsilon, True)
30
-
31
- cv2.drawContours(edges, c, -1, (0, 0, 255), cv2.CHAIN_APPROX_TC89_L1)
32
-
33
- #LSD生成
34
- LSD = cv2.createLineSegmentDetector()
35
-
36
- #線分検出
37
- lines, width, prec, nfa = LSD.detect(edges)
38
-
39
- # グレースケール変換をBGR変換
40
- color = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
41
-
42
- # 直線の描画
43
- for i in range(len(lines)):
44
- for x1,y1,x2,y2 in lines[i] :
45
- cv2.line(color,(x1,y1),(x2,y2),(0,0,255),2)
46
-
47
- #OpenCVがBGRなのでRGBに変換
48
- disp_in_img = cv2.cvtColor(color, cv2.COLOR_BGR2RGB)
49
-
50
- cv2.imshow('src', img_src)
51
- cv2.imshow('dst', disp_in_img)
52
- cv2.imshow("1", th1)
53
- cv2.imshow("2", edges)
54
-
55
- cv2.waitKey()
56
- cv2.destroyAllWindows()
57
-
58
- ```
59
- 日差しを白線として検出してしまい
60
1
  ![イメージ説明](c49a6f085a15db9e811a87cf3d2c6fc7.jpeg)
61
2
  ![イメージ説明](b7e2226c5f64c632c20eb3f0c3ff96c5.jpeg)
62
3
  ![イメージ説明](ec71bc17f02037d712fa800789df6e1e.jpeg)

1

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

2018/08/06 05:28

投稿

uriuri
uriuri

スコア47

title CHANGED
File without changes
body CHANGED
@@ -63,4 +63,12 @@
63
63
 
64
64
 
65
65
  これらを輪郭近似し取得した輪郭の頂点を元に面積が一定以上の大きさのところだけ取り出すことで日差しの部分をカットできるのではないかと思ったのですがどのように取り組んでいいか悩んでいます。
66
- アドバイスをいただけると幸いです。
66
+ アドバイスをいただけると幸いです。
67
+
68
+ <umyuさんの回答を参考に>
69
+ 画像が表示されなかったのでこちらに
70
+ ![イメージ説明](e52e19dc0a07c13b100089749ccdfdef.jpeg)
71
+
72
+ ![イメージ説明](c95c689a677695a8427298a50bad6c15.jpeg)
73
+
74
+ ![イメージ説明](50bf77b3b933fca476cef0c1453f9842.jpeg)