import cv2 import os import numpy as np patches_folder = "Patches" pred_patches = "Patch_pred" os.makedirs(patches_folder, exist_ok=True) os.makedirs(pred_patches,exist_ok=True) def split(image, destination = patches_folder, patch_size = 256): img = cv2.imread(image) h,w,_ = img.shape for y in range(0, h, patch_size): for x in range(0, w, patch_size): patch = img[y:y+patch_size, x:x+patch_size] patch_filename = f"patch_{y}_{x}.png" patch_path = os.path.join(destination, patch_filename) cv2.imwrite(patch_path, patch) def merge(patch_folder , dest_image = 'out.png', image_shape = None): merged = np.zeros(image_shape[:-1] + (3,), dtype=np.uint8) for filename in os.listdir(patch_folder): if filename.endswith(".png"): patch_path = os.path.join(patch_folder, filename) patch = cv2.imread(patch_path) patch_height, patch_width, _ = patch.shape # Extract patch coordinates from filename parts = filename.split("_") x, y = None, None for part in parts: if part.endswith(".png"): x = int(part.split(".")[0]) elif part.isdigit(): y = int(part) if x is None or y is None: raise ValueError(f"Invalid filename: {filename}") # Check if patch fits within image boundaries if x + patch_width > image_shape[1] or y + patch_height > image_shape[0]: # Adjust patch position to fit within image boundaries if x + patch_width > image_shape[1]: x = image_shape[1] - patch_width if y + patch_height > image_shape[0]: y = image_shape[0] - patch_height # Merge patch into the main image merged[y:y+patch_height, x:x+patch_width, :] = patch cv2.imwrite(dest_image, merged)