extract_parts.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # main import
  2. import os
  3. import argparse
  4. import numpy as np
  5. # images imports
  6. from PIL import Image
  7. image_block = 800, 800
  8. zone_block = 200, 200
  9. def get_parts(img):
  10. parts = []
  11. h, w, c = img.shape
  12. h_block, w_block = image_block
  13. h_zone, w_zone = zone_block
  14. m_h = int(h/2)
  15. m_w = int(w/2)
  16. m_h_img_block = int(h_block/2)
  17. m_w_img_block = int(w_block/2)
  18. # extract left up image
  19. h_start = int((h % h_zone) / 2)
  20. left_up_image = img[h_start:h_block+h_start, m_w-h_block:m_w]
  21. parts.append(left_up_image)
  22. # extract middle up image
  23. h_start = int((h % h_zone) / 2)
  24. middle_up_image = img[h_start:h_block+h_start, m_w-m_w_img_block:m_w+m_w_img_block]
  25. parts.append(middle_up_image)
  26. # extract right up image
  27. h_start = int((h % h_zone) / 2)
  28. right_up_image = img[h_start:h_block+h_start, m_w:m_w+w_block]
  29. parts.append(right_up_image)
  30. # extract left bottom image
  31. h_end = h - int((h % h_zone) / 2)
  32. h_start = h_end - h_block
  33. left_bottom_image = img[h_start:h_end, m_w-h_block:m_w]
  34. parts.append(left_bottom_image)
  35. # extract middle bottom image
  36. h_end = h - int((h % h_zone) / 2)
  37. h_start = h_end - h_block
  38. middle_bottom_image = img[h_start:h_end, m_w-m_w_img_block:m_w+m_w_img_block]
  39. parts.append(middle_bottom_image)
  40. # extract left bottom image
  41. h_end = h - int((h % h_zone) / 2)
  42. h_start = h_end - h_block
  43. right_bottom_image = img[h_start:h_end, m_w:m_w+w_block]
  44. parts.append(right_bottom_image)
  45. # extract middle center image
  46. 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]
  47. parts.append(middle_image)
  48. return parts
  49. def extract(folder, output):
  50. images_path = sorted(os.listdir(folder))
  51. # for each image get sub parts
  52. for img_name in images_path:
  53. img_path = os.path.join(folder, img_name)
  54. img = np.array(Image.open(img_path))
  55. # get all expected parts from image
  56. parts = get_parts(img)
  57. for index, part in enumerate(parts):
  58. # get part output folder and create it if not exists
  59. prefix_image_folder_path = os.path.join(output, folder.replace('/', '') + '_part' + str(index))
  60. if not os.path.exists(prefix_image_folder_path):
  61. os.makedirs(prefix_image_folder_path)
  62. # build output image path and save it
  63. image_output_folder_path = os.path.join(prefix_image_folder_path, img_name)
  64. Image.fromarray(part).save(image_output_folder_path)
  65. def main():
  66. parser = argparse.ArgumentParser(description="extract and create 7 parts of image from HD one")
  67. parser.add_argument('--folder', type=str, help="folder which HD images", required=True)
  68. parser.add_argument('--output', type=str, help="output data folder", required=True)
  69. args = parser.parse_args()
  70. p_folder = args.folder
  71. p_output = args.output
  72. extract(p_folder, p_output)
  73. if __name__ == "__main__":
  74. main()