from abc import abstractmethod, ABC import numpy as np import PIL.Image # type: ignore class ImageEffect(ABC): @staticmethod @abstractmethod def apply(pixels: np.ndarray) -> np.ndarray: raise NotImplementedError def pix_to_image(pixels: np.ndarray) -> PIL.Image.Image: pixels = np.minimum(pixels, 255) pixels = np.maximum(pixels, 0) return PIL.Image.fromarray(np.uint8(pixels)) def image_to_pix(image: PIL.Image.Image) -> np.ndarray: return np.asarray(image, dtype=np.int16) def get_image(path: str) -> PIL.Image.Image: return PIL.Image.open(path)