import numpy as np def random_crop(img, w, h): height, width = img.shape[:2] h_rnd = height - h w_rnd = width - w y = np.random.randint(0, h_rnd) if h_rnd > 0 else 0 x = np.random.randint(0, w_rnd) if w_rnd > 0 else 0 return img[y:y+height, x:x+width] def normalize_channels(img, target_channels): img_shape_len = len(img.shape) if img_shape_len == 2: h, w = img.shape c = 0 elif img_shape_len == 3: h, w, c = img.shape else: raise ValueError("normalize: incorrect image dimensions.") if c == 0 and target_channels > 0: img = img[...,np.newaxis] c = 1 if c == 1 and target_channels > 1: img = np.repeat (img, target_channels, -1) c = target_channels if c > target_channels: img = img[...,0:target_channels] c = target_channels return img def cut_odd_image(img): h, w, c = img.shape wm, hm = w % 2, h % 2 if wm + hm != 0: img = img[0:h-hm,0:w-wm,:] return img def overlay_alpha_image(img_target, img_source, xy_offset=(0,0) ): (h,w,c) = img_source.shape if c != 4: raise ValueError("overlay_alpha_image, img_source must have 4 channels") x1, x2 = xy_offset[0], xy_offset[0] + w y1, y2 = xy_offset[1], xy_offset[1] + h alpha_s = img_source[:, :, 3] / 255.0 alpha_l = 1.0 - alpha_s for c in range(0, 3): img_target[y1:y2, x1:x2, c] = (alpha_s * img_source[:, :, c] + alpha_l * img_target[y1:y2, x1:x2, c])