В вашем ответе все еще есть ряд неуказанных вещей, но в интересах предоставления вам чего-то, что, мы надеемся, будет, по крайней мере, близко к тому, что вы хотите, я выложу ответ.Он использует несколько функций из модуля itertools
для генерации имен файлов для скопированных файлов.Он просто копирует файлы изображений, используя функцию shutil.copyfile()
вместо использования модуля cv2
для считывания каждого из них в память, а затем снова записывает его - то, что не кажется необходимым, посколькувы больше ничего не делаете с изображениями.
Я попытался сделать имена переменных очень понятными и добавил комментарии в важных местах.
from itertools import count, cycle
import os
import os.path
from shutil import copyfile
ID_Paths = r"path\of\dataset\folder"
REQ_NUM_IMGS = 8 # Required number of image files in each subfolder.
# Subfolders in ID_Paths.
subfolders = [subfolder for subfolder in os.listdir(ID_Paths)
if os.path.isdir(os.path.join(ID_Paths, subfolder))]
# Equalize number of (image) files in each subfolder.
for subfolder in subfolders:
print("NOW input images of new individual...", subfolder)
# Assumes all files in subfolder are image files.
subfolder_path = os.path.join(ID_Paths, subfolder)
image_filenames = os.listdir(subfolder_path)
print(' original files:', image_filenames)
shortage = REQ_NUM_IMGS - len(image_filenames)
if shortage > 0: # Need repeats?
for i, src_img_filename in zip(count(REQ_NUM_IMGS+1),
cycle(image_filenames)):
src_imgfile_path = os.path.join(subfolder_path, src_img_filename)
img_filename, img_ext = os.path.splitext(src_img_filename)
suffix = '_' + str(i)
dst_img_filename = os.path.join(subfolder_path,
img_filename+suffix+img_ext)
dst_imgfile_path = os.path.join(subfolder_path, dst_img_filename)
print(' copying: {}\n'
' to: {}'.format(src_imgfile_path, dst_imgfile_path))
copyfile(src_imgfile_path, dst_imgfile_path)
shortage -= 1
if shortage == 0:
break