diff --git a/iopaint/helper.py b/iopaint/helper.py
index ce83f38..d0a9943 100644
--- a/iopaint/helper.py
+++ b/iopaint/helper.py
@@ -354,25 +354,29 @@ def concat_alpha_channel(rgb_np_img, alpha_channel) -> np.ndarray:
def adjust_mask(mask: np.ndarray, kernel_size: int, operate):
+ # fronted brush color "ffcc00bb"
# kernel_size = kernel_size*2+1
mask[mask >= 127] = 255
mask[mask < 127] = 0
- # fronted brush color "ffcc00bb"
- kernel = cv2.getStructuringElement(
- cv2.MORPH_ELLIPSE, (2 * kernel_size + 1, 2 * kernel_size + 1)
- )
- if operate == "expand":
- mask = cv2.dilate(
- mask,
- kernel,
- iterations=1,
- )
+
+ if operate == "reverse":
+ mask = 255 - mask
else:
- mask = cv2.erode(
- mask,
- kernel,
- iterations=1,
+ kernel = cv2.getStructuringElement(
+ cv2.MORPH_ELLIPSE, (2 * kernel_size + 1, 2 * kernel_size + 1)
)
+ if operate == "expand":
+ mask = cv2.dilate(
+ mask,
+ kernel,
+ iterations=1,
+ )
+ else:
+ mask = cv2.erode(
+ mask,
+ kernel,
+ iterations=1,
+ )
res_mask = np.zeros((mask.shape[0], mask.shape[1], 4), dtype=np.uint8)
res_mask[mask > 128] = [255, 203, 0, int(255 * 0.73)]
res_mask = cv2.cvtColor(res_mask, cv2.COLOR_BGRA2RGBA)
diff --git a/iopaint/schema.py b/iopaint/schema.py
index 739a07f..f1f82d7 100644
--- a/iopaint/schema.py
+++ b/iopaint/schema.py
@@ -304,12 +304,12 @@ class SwitchModelRequest(BaseModel):
name: str
-AdjustMaskOperate = Literal["expand", "shrink"]
+AdjustMaskOperate = Literal["expand", "shrink", "reverse"]
class AdjustMaskRequest(BaseModel):
mask: str = Field(
..., description="base64 encoded mask. 255 means area to do inpaint"
)
- operate: AdjustMaskOperate = Field(..., description="expand or shrink")
+ operate: AdjustMaskOperate = Field(..., description="expand/shrink/reverse")
kernel_size: int = Field(5, description="Kernel size for expanding mask")
diff --git a/iopaint/tests/test_adjust_mask.py b/iopaint/tests/test_adjust_mask.py
index dfa8040..1f01713 100644
--- a/iopaint/tests/test_adjust_mask.py
+++ b/iopaint/tests/test_adjust_mask.py
@@ -13,3 +13,5 @@ def test_adjust_mask():
cv2.imwrite(str(save_dir / "adjust_mask_expand.png"), res_mask)
res_mask = adjust_mask(mask, 20, "shrink")
cv2.imwrite(str(save_dir / "adjust_mask_shrink.png"), res_mask)
+ res_mask = adjust_mask(mask, 20, "reverse")
+ cv2.imwrite(str(save_dir / "adjust_mask_reverse.png"), res_mask)
diff --git a/web_app/src/components/SidePanel/DiffusionOptions.tsx b/web_app/src/components/SidePanel/DiffusionOptions.tsx
index 19d6820..6687274 100644
--- a/web_app/src/components/SidePanel/DiffusionOptions.tsx
+++ b/web_app/src/components/SidePanel/DiffusionOptions.tsx
@@ -839,6 +839,17 @@ const DiffusionOptions = () => {
Shrink
+
+