from _typeshed import StrOrBytesPath

from .Image import Image

LUT_SIZE: int
ROTATION_MATRIX: list[int]
MIRROR_MATRIX: list[int]

class LutBuilder:
    patterns: list[str]
    lut: bytearray
    def __init__(self, patterns: list[str] | None = None, op_name: str | None = None) -> None: ...
    def add_patterns(self, patterns: list[str]) -> None: ...
    def build_default_lut(self) -> None: ...
    def get_lut(self) -> bytearray: ...
    def build_lut(self) -> bytearray: ...

class MorphOp:
    lut: bytearray
    def __init__(self, lut: bytearray | None = None, op_name: str | None = None, patterns: list[str] | None = None) -> None: ...
    def apply(self, image: Image) -> tuple[int, Image]: ...
    def match(self, image: Image) -> list[tuple[int, int]]: ...
    def get_on_pixels(self, image: Image) -> list[tuple[int, int]]: ...
    def load_lut(self, filename: StrOrBytesPath) -> None: ...
    def save_lut(self, filename: StrOrBytesPath) -> None: ...
    def set_lut(self, lut: bytearray) -> None: ...
