mirror-ppr / mirrorppr /data /image_ops.py
multimodalart's picture
multimodalart HF Staff
Upload folder using huggingface_hub
834d1cf verified
Raw
History Blame Contribute Delete
1.12 kB
from __future__ import annotations
from pathlib import Path
import cv2
import numpy as np
from PIL import Image, ImageOps
def load_rgb(path: str | Path) -> Image.Image:
return ImageOps.exif_transpose(Image.open(path)).convert("RGB")
def save_rgb(image: Image.Image, path: str | Path) -> None:
path = Path(path)
path.parent.mkdir(parents=True, exist_ok=True)
image.save(path)
def pil_to_bgr(image: Image.Image) -> np.ndarray:
return cv2.cvtColor(np.asarray(image.convert("RGB")), cv2.COLOR_RGB2BGR)
def bgr_to_pil(image: np.ndarray) -> Image.Image:
return Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
def order_points(points: np.ndarray) -> np.ndarray:
pts = np.asarray(points, dtype=np.float32)
rect = np.zeros((4, 2), dtype=np.float32)
s = pts.sum(axis=1)
rect[0] = pts[np.argmin(s)]
rect[2] = pts[np.argmax(s)]
diff = np.diff(pts, axis=1)
rect[1] = pts[np.argmin(diff)]
rect[3] = pts[np.argmax(diff)]
return rect
def round_to_multiple(value: int, multiple: int = 16) -> int:
return max(multiple, (int(value) // multiple) * multiple)