52 lines
1.3 KiB
Python
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)
|