123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- # main import
- import os
- import argparse
- import numpy as np
- # images imports
- from PIL import Image
- image_block = 800, 800
- zone_block = 200, 200
- def get_parts(img):
- parts = []
- h, w, c = img.shape
- h_block, w_block = image_block
- h_zone, w_zone = zone_block
- m_h = int(h/2)
- m_w = int(w/2)
- m_h_img_block = int(h_block/2)
- m_w_img_block = int(w_block/2)
- if h > h_block and w > w_block:
- # extract left up image
- h_start = int((h % h_zone) / 2)
- w_start = int((w % w_zone) / 2)
- left_up_image = img[h_start:h_block+h_start, w_start:w_start+w_block]
- parts.append(left_up_image)
- # extract middle up image
- h_start = int((h % h_zone) / 2)
- middle_up_image = img[h_start:h_block+h_start, m_w-m_w_img_block:m_w+m_w_img_block]
- parts.append(middle_up_image)
- # extract right up image
- h_start = int((h % h_zone) / 2)
- w_end = w - int((w % w_zone) / 2)
- right_up_image = img[h_start:h_block+h_start, w_end-w_block:w_end]
- parts.append(right_up_image)
- # extract left bottom image
- h_end = h - int((h % h_zone) / 2)
- h_start = h_end - h_block
- w_start = int((w % w_zone) / 2)
- left_bottom_image = img[h_start:h_end, w_start:w_start+w_block]
- parts.append(left_bottom_image)
- # extract middle bottom image
- h_end = h - int((h % h_zone) / 2)
- h_start = h_end - h_block
-
- middle_bottom_image = img[h_start:h_end, m_w-m_w_img_block:m_w+m_w_img_block]
- parts.append(middle_bottom_image)
- # extract left bottom image
- h_end = h - int((h % h_zone) / 2)
- h_start = h_end - h_block
- w_end = w - int((w % w_zone) / 2)
- right_bottom_image = img[h_start:h_end, w_end-w_block:w_end]
- parts.append(right_bottom_image)
- # extract middle center image
- middle_image = img[m_h-m_h_img_block:m_h+m_h_img_block, m_w-m_w_img_block:m_w+m_w_img_block]
- parts.append(middle_image)
- return parts
- def extract(folder, output):
- images_path = sorted(os.listdir(folder))
- check_exists = False
- # for each image get sub parts
- for img_index, img_name in enumerate(images_path):
- img_path = os.path.join(folder, img_name)
- img = np.array(Image.open(img_path))
- # get all expected parts from image
- parts = get_parts(img)
- if len(parts) > 1:
- for index, part in enumerate(parts):
- # get part output folder and create it if not exists
- prefix_image_folder_path = os.path.join(output, folder.split('/')[-1].replace('/', '') + '_part' + str(index))
- if not os.path.exists(prefix_image_folder_path):
- os.makedirs(prefix_image_folder_path)
- elif img_index == 0:
- check_exists = True
- if not check_exists:
- # build output image path and save it
- image_output_folder_path = os.path.join(prefix_image_folder_path, img_name)
-
- Image.fromarray(part).save(image_output_folder_path)
- else:
- # only middle of the scene
- part = parts[0]
- prefix_image_folder_path = os.path.join(output, folder.split('/')[-1].replace('/', '') + '_part6')
- if not os.path.exists(prefix_image_folder_path):
- os.makedirs(prefix_image_folder_path)
- elif img_index == 0:
- check_exists = True
- if not check_exists:
- # build output image path and save it
- image_output_folder_path = os.path.join(prefix_image_folder_path, img_name)
-
- Image.fromarray(part).save(image_output_folder_path)
- if check_exists:
- break
-
- def main():
- parser = argparse.ArgumentParser(description="extract and create 7 parts of image from HD one")
- parser.add_argument('--folder', type=str, help="folder with HD images", required=True)
- parser.add_argument('--output', type=str, help="output data folder", required=True)
- args = parser.parse_args()
- p_folder = args.folder
- p_output = args.output
- print('Start extraction for folder %s' % p_folder)
- extract(p_folder, p_output)
- if __name__ == "__main__":
- main()
|