|
|
@@ -142,27 +142,26 @@ class ClassifyEdgeCorner:
|
|
|
center_point = tuple(defect['min_rect'][0])
|
|
|
|
|
|
# --- 判定逻辑优先级 ---
|
|
|
-
|
|
|
- # 优先级 1: 角 (Corner)
|
|
|
- is_corner = False
|
|
|
- for region in corner_regions:
|
|
|
- # pointPolygonTest: >0 内部, =0 边界, <0 外部
|
|
|
- if cv2.pointPolygonTest(region, center_point, False) >= 0:
|
|
|
- is_corner = True
|
|
|
- break
|
|
|
-
|
|
|
- if is_corner:
|
|
|
- defect['defect_type'] = 'corner'
|
|
|
+ # 优先级 1: 面 (Face)
|
|
|
+ # 如果点在内缩矩形内部,且不是角,那就是面
|
|
|
+ is_face = False
|
|
|
+ if face_region is not None:
|
|
|
+ if cv2.pointPolygonTest(face_region, center_point, False) >= 0:
|
|
|
+ is_face = True
|
|
|
+
|
|
|
+ if is_face:
|
|
|
+ defect['defect_type'] = 'face'
|
|
|
else:
|
|
|
- # 优先级 2: 面 (Face)
|
|
|
- # 如果点在内缩矩形内部,且不是角,那就是面
|
|
|
- is_face = False
|
|
|
- if face_region is not None:
|
|
|
- if cv2.pointPolygonTest(face_region, center_point, False) >= 0:
|
|
|
- is_face = True
|
|
|
-
|
|
|
- if is_face:
|
|
|
- defect['defect_type'] = 'face'
|
|
|
+ # 优先级 2: 角 (Corner)
|
|
|
+ is_corner = False
|
|
|
+ for region in corner_regions:
|
|
|
+ # pointPolygonTest: >0 内部, =0 边界, <0 外部
|
|
|
+ if cv2.pointPolygonTest(region, center_point, False) >= 0:
|
|
|
+ is_corner = True
|
|
|
+ break
|
|
|
+
|
|
|
+ if is_corner:
|
|
|
+ defect['defect_type'] = 'corner'
|
|
|
else:
|
|
|
# 优先级 3: 边 (Edge)
|
|
|
# 既不在角区,也不在面区(内框)里,但还在处理范围内,那就是边
|