Source code for ovl.math.image
import numpy as np
from .contours import contour_center, distance_between_points
from .geometry import slope, x_intersection, y_intersection
[docs]def image_center(image_dimensions):
"""
Calculates the center pixels of a given image dimension
:param image_dimensions: (width, height) tuple of the size of the image
:return: the (x, y) center of the image
"""
return tuple(map(lambda dimension: dimension / 2, image_dimensions))
[docs]def distance_from_frame(point, image_dimensions):
"""
Calculates the distance of a given point from the frame of the image based on the vector from the center
and the point
:param point: point (x,y tuple) or contour (numpy array)
:param image_dimensions: the size of the image, (width, height)
:return: the distance
"""
point = contour_center(point) if type(point) is np.ndarray else point
center_of_image = image_center(image_dimensions)
line_slope = slope(point, center_of_image)
intercept = - line_slope * point[0] + point[1]
xs = (image_dimensions[0] - 1, 0)
ys = (image_dimensions[1] - 1, 0)
y_distances = [distance_between_points(y_intersection(line_slope, intercept, y), point) for y in ys]
x_distances = [distance_between_points(x_intersection(line_slope, intercept, x), point) for x in xs]
return min(y_distances + x_distances)
[docs]def image_size(image: np.ndarray) -> int:
"""
Calculates the size of the given image in pixels
:param image: ndarray image in pixels
:return: the image size
"""
return image.shape[0] * image.shape[1]