python-numpy-image-manipulation / py_image_manipulation / effect.py
effect.py
Raw
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)