读取图像并有效地调整它们的大小
Reading in Images and resizing them efficiently
我尝试读入一堆图像(超过 180k)并将它们调整为新的高度和新的宽度。我使用下面的代码,它适用于少量图像,但对于大量图像,内核会死掉……那么,是否有更有效的方法来调整图像大小?也许没有阅读图像?
folders = glob.glob(r'path\to\images\*')
imagenames_list = []
for folder in folders:
for f in glob.glob(folder+'/*.png'):
imagenames_list.append(f)
read_images = []
for image in imagenames_list:
read_images.append(cv2.imread(image))
def resize_images(img, new_width, new_height):
size = (new_width, new_height)
resized_img = cv2.resize(img, size)
return resized_img
resized_img = [resize_images(img, new_width=128, new_height=32) for img in read_images]
问题似乎是您将大约 180,000 张图像加载到 read_images
列表中。这是很多图像,很可能会填满 RAM 并杀死内核。
由于您没有提及您打算如何处理这些调整大小后的图像,我可以建议您尝试做两件事。
创建一个 resize_and_save(image_path, new_size, save_path)
以立即加载、保存和发布图像。您可以将此用于 imagenames_list
中的每个图像
如果您使用它来创建用于训练的批次,请只加载准备一批所需的图像,并只调整这些图像的大小
我尝试读入一堆图像(超过 180k)并将它们调整为新的高度和新的宽度。我使用下面的代码,它适用于少量图像,但对于大量图像,内核会死掉……那么,是否有更有效的方法来调整图像大小?也许没有阅读图像?
folders = glob.glob(r'path\to\images\*')
imagenames_list = []
for folder in folders:
for f in glob.glob(folder+'/*.png'):
imagenames_list.append(f)
read_images = []
for image in imagenames_list:
read_images.append(cv2.imread(image))
def resize_images(img, new_width, new_height):
size = (new_width, new_height)
resized_img = cv2.resize(img, size)
return resized_img
resized_img = [resize_images(img, new_width=128, new_height=32) for img in read_images]
问题似乎是您将大约 180,000 张图像加载到 read_images
列表中。这是很多图像,很可能会填满 RAM 并杀死内核。
由于您没有提及您打算如何处理这些调整大小后的图像,我可以建议您尝试做两件事。
创建一个
resize_and_save(image_path, new_size, save_path)
以立即加载、保存和发布图像。您可以将此用于imagenames_list
中的每个图像
如果您使用它来创建用于训练的批次,请只加载准备一批所需的图像,并只调整这些图像的大小