回答編集履歴

3

コード修正

2018/09/14 04:15

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -20,23 +20,23 @@
20
20
 
21
21
  def contains_lines(rect, lines):
22
22
 
23
- """長方形 rect が線 lines を1本でも含むかどうか
24
23
 
24
+
25
- """
25
+ cnt = 0
26
26
 
27
27
  for line in lines:
28
28
 
29
- p1, p2 = tuple(line[:2]), tuple(line[2:])
29
+ p1, p2 = tuple(line[:2]), tuple(line[2:])
30
30
 
31
- if cv2.pointPolygonTest(rect, p1, False) >= 0 and \
31
+ if cv2.pointPolygonTest(rect, p1, False) >= 0 and \
32
32
 
33
- cv2.pointPolygonTest(rect, p2, False) >= 0:
33
+ cv2.pointPolygonTest(rect, p2, False) >= 0:
34
34
 
35
- return True
35
+ cnt += 1 # 線が長方形内に含まれる場合
36
36
 
37
+ print('cnt', cnt) # cnt 8
37
38
 
38
-
39
- return False
39
+ return cnt == 2 # 2本だけ含まれる場合
40
40
 
41
41
 
42
42
 
@@ -82,11 +82,11 @@
82
82
 
83
83
  area = cv2.contourArea(cnt)
84
84
 
85
- if area < 500 or area > 5000:
85
+ if not 500 < area < 5000:
86
86
 
87
87
  continue # 面積が小さすぎるまたは大きすぎる場合
88
88
 
89
-
89
+
90
90
 
91
91
  rotated_rect = cv2.minAreaRect(cnt)
92
92
 
@@ -102,7 +102,7 @@
102
102
 
103
103
  min_edge = min(width, height) # 短辺
104
104
 
105
- if min_edge <= 5 or min_edge >= 25:
105
+ if not 5 < min_edge < 25:
106
106
 
107
107
  continue # 長方形の短辺が短すぎるまたはすぎる場合
108
108
 

2

コードを修正

2018/09/14 04:15

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -16,20 +16,6 @@
16
16
 
17
17
 
18
18
 
19
- def within(line, rect):
20
-
21
- """長方形 rect が線 line を含むかどうか
22
-
23
- """
24
-
25
- p1, p2 = tuple(line[:2]), tuple(line[2:])
26
-
27
- return cv2.pointPolygonTest(rect, p1, False) >= 0 and \
28
-
29
- cv2.pointPolygonTest(rect, p2, False) >= 0
30
-
31
-
32
-
33
19
 
34
20
 
35
21
  def contains_lines(rect, lines):
@@ -42,7 +28,9 @@
42
28
 
43
29
  p1, p2 = tuple(line[:2]), tuple(line[2:])
44
30
 
31
+ if cv2.pointPolygonTest(rect, p1, False) >= 0 and \
32
+
45
- if within(line, rect):
33
+ cv2.pointPolygonTest(rect, p2, False) >= 0:
46
34
 
47
35
  return True
48
36
 
@@ -53,10 +41,6 @@
53
41
 
54
42
 
55
43
  def detect(img):
56
-
57
- """条件を満たす長方形一覧を返す。
58
-
59
- """
60
44
 
61
45
  dst = [] # 線を1本でも含む長方形一覧
62
46
 

1

数式を修正

2018/09/13 12:20

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -166,7 +166,7 @@
166
166
 
167
167
  この部分の意図は長方形の短辺が短すぎたり、長過ぎたりしたものを除くという意図だと理解していますが、
168
168
 
169
- ピタゴラスの定理より対角線が長方形の幅、高さより、短いということはありえないので、対角線を考慮する必要性はないと思います。(w^2 < w^2 + h^2, h^2 < w^2 + h^2 より)
169
+ ピタゴラスの定理より対角線が長方形の幅、高さより、短いということはありえないので、対角線を考慮する必要性はないと思います。(w^2 <= w^2 + h^2, h^2 <= w^2 + h^2 より)
170
170
 
171
171
 
172
172