from __future__ import annotations from pathlib import Path import numpy as np from numpy.typing import DTypeLike from PIL import Image def read_image(path: str | Path, dtype: DTypeLike = np.float32) -> np.ndarray: """Read an image file and return an HWC NumPy array.""" path = str(path) try: import rasterio with rasterio.open(path) as src: data = src.read() # (C, H, W) return np.moveaxis(data, 0, -1).astype(dtype) except ImportError: return np.asarray(Image.open(path), dtype=dtype)