raubatz's picture
download
raw
2.02 kB
import cv2
import torch
import numpy as np
class HSVThresholdMask:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"image": ("IMAGE",),
"low_threshold": ("FLOAT", {
"default": 0.2,
"min": 0,
"max": 1,
"step": 0.1
}),
"high_threshold": ("FLOAT", {
"default": 0.7,
"min": 0,
"max": 1,
"step": 0.1
}),
"hsv_channel": (["hue", "saturation", "value"],),
},
}
RETURN_TYPES = ("IMAGE",)
FUNCTION = "hsv_threshold"
CATEGORY = "postprocessing/Masks"
def hsv_threshold(self, image: torch.Tensor, low_threshold: float, high_threshold: float, hsv_channel: str):
batch_size, height, width, _ = image.shape
result = torch.zeros(batch_size, height, width)
if hsv_channel == "hue":
channel = 0
low_threshold, high_threshold = int(low_threshold * 180), int(high_threshold * 180)
elif hsv_channel == "saturation":
channel = 1
low_threshold, high_threshold = int(low_threshold * 255), int(high_threshold * 255)
elif hsv_channel == "value":
channel = 2
low_threshold, high_threshold = int(low_threshold * 255), int(high_threshold * 255)
for b in range(batch_size):
tensor_image = (image[b].numpy().copy() * 255).astype(np.uint8)
hsv_image = cv2.cvtColor(tensor_image, cv2.COLOR_RGB2HSV)
mask = cv2.inRange(hsv_image[:, :, channel], low_threshold, high_threshold)
tensor = torch.from_numpy(mask).float() / 255.
result[b] = tensor
return (result,)
NODE_CLASS_MAPPINGS = {
"HSVThresholdMask": HSVThresholdMask,
}

Xet Storage Details

Size:
2.02 kB
·
Xet hash:
87f55050ab42bc2224000bf325f8264f2dd0e2a68732c8d2dbb5541db458b171

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.