medvision/image/io.py
from enum import Enum, unique
from pathlib import Path
from typing import Union
import cv2
import medvision as mv
import numpy as np
@unique
class ImreadMode(Enum):
RGB = cv2.IMREAD_COLOR
GRAY = cv2.IMREAD_GRAYSCALE
UNCHANGED = cv2.IMREAD_UNCHANGED
def imread(
file_path: Union[str, Path],
flag: ImreadMode = ImreadMode.RGB
):
""" Read an image.
Args:
file_path (str or Path): image file path.
flag (ImreadMode): flags specifying the color type of a loaded image,
refer to ImreadMode for more details.
Returns:
(numpy.ndarray): loaded image array.
Note:
The format of the loaded image array is RGB.
"""
img = cv2.imread(str(file_path), flag.value)
if img.ndim == 3:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
return img
def imwrite(
file_path: Union[str, Path],
img: np.ndarray,
auto_mkdirs: bool = True
):
""" Save image to specified file.
Args:
file_path (str or Path): specified file path to save to.
img (numpy.ndarray): image array to be written.
auto_mkdirs (bool): If the parent folder of `file_path` does not exist,
whether to create it automatically.
Returns:
(bool): returns whether the image is saved successfully.
Note:
If the given image is a color image. It should be in RGB format.
"""
if auto_mkdirs:
mv.mkdirs(mv.parentdir(file_path))
if img.ndim == 3:
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
return cv2.imwrite(str(file_path), img)