VideoGrain / image_util /process_webui_mask.py
XiangpengYang's picture
update
dcd1471
import os
import cv2
import numpy as np
import argparse
from PIL import Image
def convert_and_copy_masks(src_folder, dest_folder, index_offset, start_frame, end_frame):
# Ensure that the destination folder exists
if not os.path.exists(dest_folder):
os.makedirs(dest_folder)
# Iterate over all files in the source folder
for filename in os.listdir(src_folder):
if filename.endswith(".png"): # Process only PNG files
# Extract the numeric part of the file name
file_index = int(filename.split('.')[0])
# Check if the file index is within the specified frame range
if start_frame <= file_index <= end_frame:
# Calculate the new index
new_index = file_index + index_offset
# Construct the new file name
new_filename = f"{new_index:05d}.png"
# Read the original mask image (grayscale)
src_path = os.path.join(src_folder, filename)
mask = cv2.imread(src_path, cv2.IMREAD_GRAYSCALE)
# Apply thresholding to convert the mask to 0 and 1
_, mask = cv2.threshold(mask, 0.5, 1, cv2.THRESH_BINARY)
# Convert mask value range to 0-255
mask = (mask * 255).astype(np.uint8)
# Save the converted mask to the destination folder
dest_path = os.path.join(dest_folder, new_filename)
cv2.imwrite(dest_path, mask)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Convert and copy mask images with index adjustment")
parser.add_argument('--src_folder', type=str, required=True, help="Path to the source folder containing mask images")
parser.add_argument('--dest_folder', type=str, required=True, help="Path to the destination folder for converted masks")
parser.add_argument('--index_offset', type=int, default=0, help="Index offset to apply to file names")
parser.add_argument('--start_frame', type=int, default=0, help="Start frame number")
parser.add_argument('--end_frame', type=int, required=True, help="End frame number")
args = parser.parse_args()
convert_and_copy_masks(args.src_folder, args.dest_folder, args.index_offset, args.start_frame, args.end_frame)
print("Mask conversion and copying completed")