回答編集履歴

2

コード修正

2021/01/17 14:20

投稿

jbpb0
jbpb0

スコア7653

test CHANGED
@@ -1,4 +1,4 @@
1
- cv2.HoughLinesP()のパラメータをいじると、背景から直線を抽出してしまうことがあるため、対象物が青っぽいこともマスク条件に入れました
1
+ cv2.HoughLinesP()のパラメータをいじると、背景から直線を抽出してしまうことがあるため、対象物の色濃いことに加え、青っぽいこともマスク条件に入れました
2
2
 
3
3
  ```python
4
4
 
@@ -12,9 +12,11 @@
12
12
 
13
13
  iw = img.shape[1]
14
14
 
15
- Hue = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)[:,:,0]
15
+ img_HSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
16
16
 
17
+ Hue = img_HSV[:,:,0]
18
+
17
- Sat = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)[:,:,1]
19
+ Sat = img_HSV[:,:,1]
18
20
 
19
21
  retB1,threshB1 = cv2.threshold(Hue,90,255,cv2.THRESH_BINARY)
20
22
 
@@ -49,3 +51,7 @@
49
51
  ```
50
52
 
51
53
  各関数のパラメータは、そんなに追い込んでませんので、いろいろ変えてみたら、もっとうまく抽出できるかも
54
+
55
+
56
+
57
+ 【追記】cv2.cvtColor()の実行を1回だけにしました

1

コード修正

2021/01/17 14:20

投稿

jbpb0
jbpb0

スコア7653

test CHANGED
@@ -1,4 +1,4 @@
1
- ろいろ見す余地はありが、とりあえず
1
+ cv2.HoughLinesP()のパラメータをじると、背景から線を抽出してしうことあるため対象物が青っぽいこもマスク条件に入れました
2
2
 
3
3
  ```python
4
4
 
@@ -12,13 +12,19 @@
12
12
 
13
13
  iw = img.shape[1]
14
14
 
15
- gray = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)[:,:,1]
15
+ Hue = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)[:,:,0]
16
16
 
17
- ret,thresh = cv2.threshold(gray,100,255,cv2.THRESH_BINARY)
17
+ Sat = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)[:,:,1]
18
18
 
19
- edges = cv2.Canny(gray,50,150,apertureSize=3)
19
+ retB1,threshB1 = cv2.threshold(Hue,90,255,cv2.THRESH_BINARY)
20
20
 
21
+ retB2,threshB2 = cv2.threshold(Hue,150,255,cv2.THRESH_BINARY_INV)
22
+
23
+ retS,threshS = cv2.threshold(Sat,100,255,cv2.THRESH_BINARY)
24
+
25
+ edges = cv2.Canny(Sat,50,150,apertureSize=3)
26
+
21
- edges2 = edges * thresh * 255
27
+ edges2 = edges * threshB1 * threshB2 * threshS * 255
22
28
 
23
29
  lines = cv2.HoughLinesP(edges2,rho=1,theta=np.pi/360/10,threshold=int(iw*0.05),minLineLength=int(iw*0.25),maxLineGap=int(iw*0.4))
24
30
 
@@ -32,10 +38,14 @@
32
38
 
33
39
 
34
40
 
35
- cv2.imshow("img_line", img_line)
41
+ cv2.imwrite('output.png',img_line)
36
42
 
37
- cv2.waitKey(0)
43
+ #cv2.imshow("output", img_line)
38
44
 
45
+ #cv2.waitKey(0)
46
+
39
- cv2.destroyAllWindows()
47
+ #cv2.destroyAllWindows()
40
48
 
41
49
  ```
50
+
51
+ 各関数のパラメータは、そんなに追い込んでませんので、いろいろ変えてみたら、もっとうまく抽出できるかも