2023-01-24 15:44:24 +01:00

52 lines
1.3 KiB
Python

import cv2
import numpy as np
from PIL import Image
from PIL.Image import Image as Image_t
from matplotlib import pyplot as plt
from cv_analysis.utils.conversion import normalize_image_format_to_array
def show_image(image, backend="mpl", **kwargs):
image = normalize_image_format_to_array(image)
if backend == "mpl":
show_image_mpl(image, **kwargs)
elif backend == "cv2":
show_image_cv2(image, **kwargs)
elif backend == "pil":
Image.fromarray(image).show()
else:
raise ValueError(f"Unknown backend: {backend}")
def show_image_cv2(image, maxdim=700, **kwargs):
h, w, c = image.shape
maxhw = max(h, w)
if maxhw > maxdim:
ratio = maxdim / maxhw
h = int(h * ratio)
w = int(w * ratio)
img = cv2.resize(image, (h, w))
cv2.imshow("", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def show_image_mpl(image, **kwargs):
if isinstance(image, Image_t):
# noinspection PyTypeChecker
image = np.array(image)
# noinspection PyArgumentList
assert image.max() <= 255
fig, ax = plt.subplots(1, 1)
fig.set_size_inches(20, 20)
assert image.dtype == np.uint8
ax.imshow(image, cmap="gray")
ax.title.set_text(kwargs.get("title", ""))
plt.show()
def save_image(image, path):
cv2.imwrite(path, image)