保存处理后的图像

时间:2018-11-28 22:36:42

标签: python-3.x image-processing deep-learning

我需要处理大量的图像,大约80GB。我需要对图像进行预处理,以使其具有合适的尺寸,以适合NN。但是,我不知道保存这些已处理图像的最佳方法是什么。目前,我只是将其保存到列表中。我可以使用此列表导出哪种文件?而我该怎么办呢???

from PIL import Image
from zipfile import ZipFile
import numpy as np
import tensorflow as tf
import random

def main():

    # import data
    labels = []  #list of file names without suffix
    img = []

    with ZipFile('train_8.zip','r') as archive:
        for item in archive.namelist():
          #  labels.append(os.path.splitext(entry.filename)[0])
            if (".jpg" in item or ".JPG" in item):
                with archive.open(item) as file:
                    ima = Image.open(file)
                    ima = ima.resize((928,928))
                    randnum = random.randint(227,701)
                    box = (randnum-113,randnum-113,randnum+114,randnum+114)
                    region = ima.crop(box)
                    img.append(np.asarray(ima.crop(box)))

if __name__ == '__main__':
    main()

2 个答案:

答案 0 :(得分:0)

您可以将数据导出为json文件

from PIL import Image
from zipfile import ZipFile
import numpy as np
import tensorflow as tf
import random
import json

def main():

    # import data
    labels = []  #list of file names without suffix
    img = []

    with ZipFile('train_8.zip','r') as archive:
        for item in archive.namelist():
            # labels.append(os.path.splitext(entry.filename)[0])
            if (".jpg" in item or ".JPG" in item):
                with archive.open(item) as file:
                    ima = Image.open(file)
                    ima = ima.resize((928,928))
                    randnum = random.randint(227,701)
                    box = (randnum-113,randnum-113,randnum+114,randnum+114)
                    region = ima.crop(box)
                    img.append(np.asarray(ima.crop(box)))

    # save using json
    f=open('file.json','w')
    f.write(json.dumps({"labels":labels,"img":img}))
    f.close()

if __name__ == '__main__':
    main()

要阅读,请使用:

import json

# read file
f=open('file.json','r')
d=json.loads(f.read())
f.close()

# save to seperate varibles
labels=d["labels"]
img=d["img"]

答案 1 :(得分:0)

如果您有足够的RAM,则最容易使用的格式是.npy文件,它只是一个numpy数组。将您的列表转换为numpy数组,然后执行

 np.save(file, array)

然后您可以使用以下简单命令加载该文件:

np.load(file)

如果您没有足够的RAM,则可以使用h5格式,尽管这种格式使用起来有点困难,但它是针对此类用例设计的。它在加密数据内部模拟了文件系统,因此将大大减少文件大小,并使顺序访问变得容易。此处显示了如何在python中开始使用:(http://docs.h5py.org/en/stable/)。

另一种常见方法是仅将文件存储为图像,然后使用tf.data快速加载图像。仅在您的数据太大而无法加载到内存中时才需要这样做。然后,您可以像使用我的海报一样使用.json将标签链接到图像。