72 lines
2.5 KiB
Markdown
72 lines
2.5 KiB
Markdown
|
|
# Documentation
|
|
- Class name: RemapToQuadrilateral
|
|
- Category: Bmad/CV/Transform
|
|
- Output node: False
|
|
|
|
RemapToQuadrilateral节点专门用于基于四边形形状对图像进行变换。它可以调整图像的透视效果,或将图像映射到四边形形状上或从四边形形状映射回来,采用包括单应性在内的多种方法。
|
|
|
|
# Input types
|
|
## Required
|
|
- dst_mask_with_i_points
|
|
- 指定带有四个点的目标掩码,这四个点定义了图像将被重新映射到的四边形。这个输入对于确定变换的目标几何形状至关重要。
|
|
- Comfy dtype: MASK
|
|
- Python dtype: ndarray
|
|
- mode
|
|
- 定义用于重新映射过程的方法,如单应性或其他四边形重映射技术。模式的选择会影响图像的变换方式。
|
|
- Comfy dtype: COMBO[STRING]
|
|
- Python dtype: str
|
|
|
|
# Output types
|
|
- remap
|
|
- 提供重映射过程的详细信息,包括变换后的图像和应用的任何相关几何变换。
|
|
- Comfy dtype: REMAP
|
|
- Python dtype: tuple
|
|
- ui
|
|
- 输出包括根据指定的四边形形状和重映射方法变换后的图像。
|
|
|
|
|
|
## Usage tips
|
|
- Infra type: `CPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class RemapQuadrilateral(RemapBase):
|
|
from .utils.remaps import quad_remap_methods_map
|
|
|
|
modes_list = list(quad_remap_methods_map.keys())
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {"required": {
|
|
"dst_mask_with_4_points": ("MASK",),
|
|
"mode": (s.modes_list, {"default": s.modes_list[0]}),
|
|
}
|
|
}
|
|
|
|
@staticmethod
|
|
def homography(custom_data, src, interpolation, mask=None):
|
|
h_matrix, bb = custom_data
|
|
bb_width, bb_height = bb[2] - bb[0], bb[3] - bb[1]
|
|
ret = cv.warpPerspective(src, h_matrix, (bb_width, bb_height), flags=interpolation,
|
|
borderMode=cv.BORDER_CONSTANT)
|
|
if mask is not None:
|
|
mask = cv.warpPerspective(mask, h_matrix, (bb_width, bb_height), flags=interpolation,
|
|
borderMode=cv.BORDER_CONSTANT)
|
|
return ret, mask, bb
|
|
|
|
def send_remap(self, dst_mask_with_4_points, mode):
|
|
from .utils.remaps import remap_quadrilateral
|
|
remap_data = {
|
|
"func": remap_quadrilateral,
|
|
"xargs": [tensor2opencv(dst_mask_with_4_points, 1), mode],
|
|
"dims": RemapBase.get_dims(dst_mask_with_4_points)
|
|
}
|
|
if mode == "HOMOGRAPHY":
|
|
remap_data["custom"] = RemapQuadrilateral.homography
|
|
return (remap_data,)
|
|
|
|
```
|