Source code for neuralib.imglib.transform

import cv2
import numpy as np

__all__ = ['affine_transform',
           'apply_transformation']


[docs] def affine_transform(src: np.ndarray) -> np.ndarray: """ Do affine transformation on flatten image .. seealso:: https://docs.opencv.org/4.x/d4/d61/tutorial_warp_affine.html :param src: source image array :return: output image array """ srcTri = np.array([ [0, 0], [src.shape[1] - 1, 0], [0, src.shape[0] - 1] ]).astype(np.float32) dstTri = np.array([ [0, src.shape[1] * 0.33], [src.shape[1] * 0.6, src.shape[0] * 0.25], [src.shape[1] * 0.4, src.shape[0] * 0.7] ]).astype(np.float32) mat = cv2.getAffineTransform(srcTri, dstTri) warp_dst = cv2.warpAffine(src, mat, (src.shape[1], src.shape[0])) return warp_dst
[docs] def apply_transformation(img: np.ndarray, trans_mtx: np.ndarray, **kwargs) -> np.ndarray: """ Apply 2D image transform :param img: image array. `Array[float, [H, W, 3] | [H, W, 4] | [H, W]]` :param trans_mtx: Transformation matrix. `Array[float, [3, 3]]` :param kwargs: additional arguments pass to ``cv2.warpPerspective()`` :return: transformed image array """ height, width = img.shape[:2] if trans_mtx.shape != (3, 3): raise ValueError(f'invalid transformation shape: {trans_mtx.shape}') return cv2.warpPerspective(img, trans_mtx, (width, height), **kwargs)