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)