Source code for visumorph.Image

from PIL import Image as PImage
import visumorph as vm
import numpy as np
from functools import partial


[docs] class Image: """The main class for VisuMorph Image objects.""" def __init__(self, image): self.image = image
[docs] def get_dimensions(self): return self.image.shape
[docs] def save(self, file_path): """Saves the image to a file. Parameters ---------- file_path : str The path where the image should be saved. """ # Convert the image data to a Pillow Image and save it to the specified path pil_image = PImage.fromarray(self.image) pil_image.save(file_path)
[docs] def __repr__(self): return f"VisuMorph Image, dimensions: {self.get_dimensions()}"
def __self_inject(self, func): """Wrapper method to self-inject into visumorph functions.""" return partial(func, self)
[docs] def flip(self, *args, **kwargs): """Flip image vertically or horizontally. Parameters ---------- v : int, optional Flip vertically if v=1, horizontally if v=0. By default, v=0. Returns ------- image Flipped VisuMorph image. Raises ------ TypeError If the image is not a valid VisuMorph Image and/or v is not 0 or 1. Examples -------- >>> import visumorph >>> from visumorph.flip import flip >>> img = visumorph.load_image("exampleimage.jpg") >>> img.flip(v=1) """ return self.__self_inject(vm.flip)(*args, **kwargs)
[docs] def rotate(self, *args, **kwargs): """Rotate an image with a given rotation. This method will rotate a VisuMorph image by a given degree of rotation. A background image can be specified for filling any empty spaces which are not covered by the image after rotation. Parameters ---------- rotation : float The desired rotation angle in degrees. +ve means clockwise while -ve means counter-clockwise. background : visumorph.Image, optional The background image to be filled in where the rotated image is not covered. Default is None, which a black background image would be used. Returns ------- image The VisuMorph Image after rotation. Raises ------ TypeError If the image is not a valid VisuMorph Image and/or rotation given is not a number. Examples -------- >>> import visumorph as vm >>> img = vm.load_image("test.jpg") >>> rotated_45_img = img.rotate(img, 45.0) """ return self.__self_inject(vm.rotate)(*args, **kwargs)
[docs] def scale(self, *args, **kwargs): """Enlarge/Shrink an image with a given scale. This method will scale a VisuMorph image by a given scale with 1.0 as the original scale. The final transformed image would have a dimension of (scale * original_width, scale * original_height), rounded top to the nearest integer. Parameters ---------- scale : float or int The desired scale. The original scale of the image is 1.0. A scale larger than 1.0 will result in a final image having a larger dimension, and vice versa. Cannot be equal or smaller than 0.0. Returns ------- image The VisuMorph Image scaled. Raises ------ TypeError If the image is not a valid VisuMorph Image and/or scale given is not a number. ValueError If the scale provided is equal 0 or is a negative number. Examples -------- >>> import visumorph as vm >>> img = vm.load_image("test.jpg") >>> scaled_img = img.scale(img, 1.15) """ return self.__self_inject(vm.scale)(*args, **kwargs)
[docs] def change_hue(self, *args, **kwargs): """Change the hue of a VisuMorph Image object by blending it with a layer of specified color. Parameters ---------- color : str, optional The color used for the blending layer (default is "white"). delta_hue : float or int, optional The degree of blending with the color layer. A value of 0 means no change, and 1 means complete replacement with the color layer (default is 1). Returns ------- Image : visumorph.Image A new VisuMorph Image object with the modified hue. Raises ------ TypeError If the input is not a valid VisuMorph Image object. ValueError If 'delta_hue' is not a number. Examples -------- >>> import visumorph as vm >>> img = vm.load_image("test.jpg") >>> hue_changed = img.change_hue(img) """ return self.__self_inject(vm.change_hue)(*args, **kwargs)
[docs] def load_image(image_path): """Load an image from filesystem and return an Image object. Parameters ---------- image_path : str The path to the image file to be read. Returns ------- image The VisuMorph Image object with image data loaded in. """ img = PImage.open(image_path) arr = np.array(img) return Image(arr)