Skip to content

Commit d318ba8

Browse files
authored
[Feat&Fix] 필기 제거 강도 옵션 최적화
[Feat&Fix] 필기 제거 강도 옵션 최적화
2 parents 39ba458 + 7bc2cae commit d318ba8

File tree

1 file changed

+36
-25
lines changed

1 file changed

+36
-25
lines changed

app/ColorRemover.py

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ def __init__(self, target_rgb_list, intensity): # 팀 주정뱅이: 30, 150, 15
2424

2525
self.target_rgb_list = target_rgb_list
2626
self.target_hsv_list = None
27-
self.tolerance = None
27+
self.pencil_tolerance = None
28+
self.color_tolerance = None
2829
self.intensity = intensity
2930

3031
self.alpha_channel = None
@@ -43,38 +44,48 @@ def masking(self, image_rgb): # important
4344

4445
self.masks = np.zeros(image_hsv.shape[:2], dtype=np.uint8)
4546
self.target_hsv_list = rgb_to_hsv_list(self.target_rgb_list)
47+
if self.intensity == 0: # 강도 약하게
48+
self.color_tolerance = (5, 180, 160) # 튀는 색상펜 특화
49+
self.sharp_tolerance = (150, 30, 60) # 샤프 특화
50+
lower_min_v = 50
51+
elif self.intensity == 1: # 강도 중간
52+
self.color_tolerance = (15, 180, 160) # 튀는 색상펜 특화
53+
self.sharp_tolerance = (150, 30, 60) # 샤프 특화
54+
lower_min_v = 30
55+
else: # 강도 강하게
56+
self.color_tolerance = (30, 180, 160) # 튀는 색상펜 특화
57+
self.sharp_tolerance = (150, 40, 90) # 샤프 특화
58+
lower_min_v = 10
59+
4660
for target_hsv in self.target_hsv_list:
4761
circle_mask = None
48-
if self.intensity == 0 or (self.intensity == 1 and target_hsv[1] <= 25): # 샤프 특화
49-
self.tolerance = (150, 35, 80)
50-
lower_bound = np.array([max(0, target_hsv[0] - self.tolerance[0]),
51-
max(0, target_hsv[1] - self.tolerance[1]),
52-
max(50 , target_hsv[2] - self.tolerance[2])])
53-
upper_bound = np.array([min(179, target_hsv[0] + self.tolerance[0]),
54-
min(200, target_hsv[1] + self.tolerance[1]),
55-
min(150, target_hsv[2] + self.tolerance[2])])
56-
elif self.intensity == 2 or (self.intensity == 1 and target_hsv[1] > 25):
57-
self.tolerance = (30, 180, 160) # 튀는 색상펜 특화
58-
lower_bound = np.array([max(0, target_hsv[0] - self.tolerance[0]),
59-
max(20, target_hsv[1] - self.tolerance[1]),
60-
max(10, target_hsv[2] - self.tolerance[2])])
61-
upper_bound = np.array([min(179, target_hsv[0] + self.tolerance[0]),
62-
min(255, target_hsv[1] + self.tolerance[1]),
63-
min(255, target_hsv[2] + self.tolerance[2])])
64-
lower_hue = target_hsv[0] - self.tolerance[0]
65-
upper_hue = target_hsv[0] + self.tolerance[0]
66-
# 빨간색 순환처리
67-
if lower_hue < 0:
62+
if target_hsv[1] <= 25: # 색상의 채도가 낮다면 -> 펜슬 간주
63+
lower_bound = np.array([max(0, target_hsv[0] - self.sharp_tolerance[0]),
64+
max(0, target_hsv[1] - self.sharp_tolerance[1]),
65+
max(lower_min_v, target_hsv[2] - self.sharp_tolerance[2])])
66+
upper_bound = np.array([min(180, target_hsv[0] + self.sharp_tolerance[0]),
67+
min(30, target_hsv[1] + self.sharp_tolerance[1]),
68+
min(150, target_hsv[2] + self.sharp_tolerance[2])])
69+
else: # 색상의 채도가 있다면 -> 색상펜 간주
70+
lower_bound = np.array([max(0, target_hsv[0] - self.color_tolerance[0]),
71+
max(20, target_hsv[1] - self.color_tolerance[1]),
72+
max(lower_min_v, target_hsv[2] - self.color_tolerance[2])])
73+
upper_bound = np.array([min(180, target_hsv[0] + self.color_tolerance[0]),
74+
min(255, target_hsv[1] + self.color_tolerance[1]),
75+
min(255, target_hsv[2] + self.color_tolerance[2])])
76+
lower_hue = target_hsv[0] - self.color_tolerance[0]
77+
upper_hue = target_hsv[0] + self.color_tolerance[0]
78+
if lower_hue < 0: # 빨간색 순환처리
6879
circle_lower_bound = lower_bound.copy()
6980
circle_upper_bound = upper_bound.copy()
70-
circle_lower_bound[0] = (target_hsv[0] - self.tolerance[0] + 180) % 180
71-
circle_upper_bound[0] = 179
81+
circle_lower_bound[0] = (target_hsv[0] - self.color_tolerance[0] + 180) % 180
82+
circle_upper_bound[0] = 180
7283
circle_mask = cv2.inRange(image_hsv, circle_lower_bound, circle_upper_bound)
73-
elif upper_hue > 179:
84+
elif upper_hue > 180:
7485
circle_lower_bound = lower_bound.copy()
7586
circle_upper_bound = upper_bound.copy()
7687
circle_lower_bound[0] = 0
77-
circle_upper_bound[0] = (target_hsv[0] + self.tolerance[0] - 180) % 180
88+
circle_upper_bound[0] = (target_hsv[0] + self.color_tolerance[0] - 180) % 180
7889
circle_mask = cv2.inRange(image_hsv, circle_lower_bound, circle_upper_bound)
7990

8091
temp_mask = cv2.inRange(image_hsv, lower_bound, upper_bound)

0 commit comments

Comments
 (0)