mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 01:04:32 +02:00
fix(mask): guard zero-area divide in auto-mask Edge mode
In get_mask() Edge mode, largest_size is set to 0 when there are no contours, but the luminance loop is also entered when contours exist whose largest has zero area (e.g. thin 1px / degenerate features whose cv2.contourArea is 0). That path divides by largest_size and raises ZeroDivisionError, crashing auto-masking. Guard the divide: when largest_size is 0 the scaled luminance is 0, so the loop breaks on the first iteration and yields an empty mask (the sensible no-region result). Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -340,7 +340,7 @@ def get_mask(input_image: gr.Image, input_mask: gr.Image):
|
||||
largest_size = cv2.contourArea(contours[0]) if len(contours) > 0 else 0
|
||||
for i, contour in enumerate(contours):
|
||||
area_size = cv2.contourArea(contour)
|
||||
luminance = int(255.0 * area_size / largest_size)
|
||||
luminance = int(255.0 * area_size / largest_size) if largest_size > 0 else 0
|
||||
if luminance < 1:
|
||||
break
|
||||
cv2.drawContours(output_mask, contours, i, (luminance), -1)
|
||||
|
||||
Reference in New Issue
Block a user