【问题标题】:Reading in Images and resizing them efficiently读取图像并有效地调整它们的大小
【发布时间】:2020-05-19 20:18:22
【问题描述】:

我尝试读取一堆图像(超过 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]

【问题讨论】:

  • 您可以使用 imagemagick 的转换实用程序将它们保存在磁盘上您需要的大小,然后仅在需要时加载调整大小的图像
  • 在这种情况下,使用@shortcipher3 建议的命令行工具进行预处理是可行的方法。

标签: python image opencv image-resizing


【解决方案1】:

问题似乎是您将大约 180,000 张图像加载到 read_images 列表中。那是很多图像,很可能会填满 RAM 并杀死内核。

由于您没有提及您打算如何处理这些调整大小的图像,我可以建议您尝试两件事。

  • 创建resize_and_save(image_path, new_size, save_path) 以立即加载、保存和释放图像。您可以将其用于imagenames_list中的每张图片

  • 如果您使用它来创建批次进行训练,请仅加载所需数量的图像以准备一批并仅调整这些图像的大小

【讨论】:

  • 我想用这些数据训练一个神经网络,但我只使用了其中的 60%。为了获得正确的训练图像,我实际上必须将图像与另一个数据集合并。我不知道在使用批量大小时如何做到这一点?我认为在那种情况下,第一个选项是合适的,你是什么意思?
猜你喜欢
  • 1970-01-01
  • 2012-08-28
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2020-11-10
  • 2012-02-16
  • 1970-01-01
相关资源
最近更新 更多