96 lines
4.6 KiB
Markdown
96 lines
4.6 KiB
Markdown
# Documentation
|
|
- Class name: CreateRectMask
|
|
- Category: Masquerade Nodes
|
|
- Output node: False
|
|
- Repo Ref: https://github.com/BadCafeCode/masquerade-nodes-comfyui
|
|
|
|
CreateRectMask 节点旨在根据指定的参数生成矩形掩码。它计算掩码角落的坐标,考虑到测量模式(百分比或像素)、矩形的原点以及提供的尺寸。该节点非常灵活,允许自定义掩码相对于应用图像的位置和大小。它还提供了一个选项来复制图像大小,以实现动态掩码创建。
|
|
|
|
# Input types
|
|
## Required
|
|
- mode
|
|
- mode 参数确定掩码尺寸的测量单位。它可以是 'percent' 表示基于百分比的坐标,或者是 'pixels' 表示绝对像素值。
|
|
- Comfy dtype: str
|
|
- Python dtype: str
|
|
- origin
|
|
- origin 参数决定了计算掩码位置的参考点。它可以是 'topleft'、'bottomleft'、'topleft' 或 'bottomright' 中的一个。
|
|
- Comfy dtype: str
|
|
- Python dtype: str
|
|
- x
|
|
- x 参数指定掩码起始点的水平位置。它与模式和原点一起使用,以确定掩码的位置。
|
|
- Comfy dtype: float
|
|
- Python dtype: float
|
|
- y
|
|
- y 参数指定掩码起始点的垂直位置。它与 x 参数和其他设置一起工作,以建立掩码的坐标。
|
|
- Comfy dtype: float
|
|
- Python dtype: float
|
|
- width
|
|
- width 参数设置掩码的宽度。这是一个关键的尺寸,与高度一起定义了掩码的形状和覆盖区域。
|
|
- Comfy dtype: float
|
|
- Python dtype: float
|
|
- height
|
|
- height 参数设置掩码的垂直范围。它在确定掩码的总体大小和它所包含的区域方面至关重要。
|
|
- Comfy dtype: float
|
|
- Python dtype: float
|
|
- image_width
|
|
- image_width 参数定义了将应用掩码的图像的宽度。如果模式设置为 'percent',它对于确保掩码尺寸正确缩放非常重要。
|
|
- Comfy dtype: int
|
|
- Python dtype: int
|
|
- image_height
|
|
- image_height 参数定义了图像的高度。它与 image_width 类似,在根据图像大小缩放掩码尺寸方面起着类似的作用。
|
|
- Comfy dtype: int
|
|
- Python dtype: int
|
|
## Optional
|
|
- copy_image_size
|
|
- 可选的 copy_image_size 参数允许掩码采用所提供图像的尺寸。这对于创建基于所应用图像的动态尺寸的掩码非常有用。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: PIL.Image or torch.Tensor
|
|
|
|
# Output types
|
|
- mask
|
|
- 输出掩码是一个二进制图像,表示由输入参数定义的矩形区域。它是各种图像处理任务(如对象分割或掩码)的关键组件。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: torch.Tensor
|
|
|
|
# Usage tips
|
|
- Infra type: CPU
|
|
|
|
# Source code
|
|
```
|
|
class CreateRectMask:
|
|
"""
|
|
Creates a rectangle mask. If copy_image_size is provided, the image_width and image_height parameters are ignored and the size of the given images will be used instead.
|
|
"""
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {'required': {'mode': (['percent', 'pixels'],), 'origin': (['topleft', 'bottomleft', 'topright', 'bottomright'],), 'x': ('FLOAT', {'default': 0, 'min': 0, 'max': VERY_BIG_SIZE, 'step': 1}), 'y': ('FLOAT', {'default': 0, 'min': 0, 'max': VERY_BIG_SIZE, 'step': 1}), 'width': ('FLOAT', {'default': 50, 'min': 0, 'max': VERY_BIG_SIZE, 'step': 1}), 'height': ('FLOAT', {'default': 50, 'min': 0, 'max': VERY_BIG_SIZE, 'step': 1}), 'image_width': ('INT', {'default': 512, 'min': 64, 'max': VERY_BIG_SIZE, 'step': 64}), 'image_height': ('INT', {'default': 512, 'min': 64, 'max': VERY_BIG_SIZE, 'step': 64})}, 'optional': {'copy_image_size': ('IMAGE',)}}
|
|
RETURN_TYPES = ('IMAGE',)
|
|
FUNCTION = 'create_mask'
|
|
CATEGORY = 'Masquerade Nodes'
|
|
|
|
def create_mask(self, mode, origin, x, y, width, height, image_width, image_height, copy_image_size=None):
|
|
min_x = x
|
|
min_y = y
|
|
max_x = min_x + width
|
|
max_y = min_y + height
|
|
if copy_image_size is not None:
|
|
size = copy_image_size.size()
|
|
image_width = size[2]
|
|
image_height = size[1]
|
|
if mode == 'percent':
|
|
min_x = min_x / 100.0 * image_width
|
|
max_x = max_x / 100.0 * image_width
|
|
min_y = min_y / 100.0 * image_height
|
|
max_y = max_y / 100.0 * image_height
|
|
if origin == 'bottomleft' or origin == 'bottomright':
|
|
(min_y, max_y) = (image_height - max_y, image_height - min_y)
|
|
if origin == 'topright' or origin == 'bottomright':
|
|
(min_x, max_x) = (image_width - max_x, image_width - min_x)
|
|
mask = torch.zeros((image_height, image_width))
|
|
mask[int(min_y):int(max_y) + 1, int(min_x):int(max_x) + 1] = 1
|
|
return (mask.unsqueeze(0),)
|
|
``` |