【问题标题】:pickling an image object? [duplicate]腌制图像对象? [复制]
【发布时间】:2014-09-26 02:19:20
【问题描述】:

我是pickle的新手,我有一堆(大约100,000)张图片需要腌制。

它们首先作为图像对象加载,并转换为如下数据:

image = {
    'pixels': im.tostring(),
    'size': im.size,
    'mode': im.mode,
}

现在如何将它们腌制到一个 pkl 文件中?

【问题讨论】:

  • 有你想要的理由吗?为什么不将它们存储为 PNG 格式而不是 pickle 格式呢?它会小很多,而且加载速度也可能更快。
  • 另外,你没有到达这里的哪一部分?如果你知道如何腌制东西,你怎么不知道如何腌制这个字典?
  • @abarnert 我需要用deeplearning.net/tutorial/code/rbm.py 这段代码运行它,它似乎正在使用pkl..
  • @abarnert 我是泡菜的新手,一开始不知道如何泡菜。
  • 你读过the docs吗?

标签: python pickle


【解决方案1】:

你可以这样做:

file = open('data.pkl', 'wb')

# Pickle dictionary using protocol 0.
pickle.dump(image, file)
file.close()

要在字典中阅读,你可以这样做:

file = open('data.pkl', 'rb')

image = pickle.load(pkl_file)
print image
file.close()

也可以将数据转储两次:

import pickle

# Write to file.
file = open("data.pkl", "wb")
pickle.dump(image1, file)
pickle.dump(image2, file)
file.close()

# Read from file.
file = open("data.pkl", "rb")
image1 = pickle.load(file)
image2 = pickle.load(file)
file.close()

【讨论】:

  • 如果我有很多图像对象要腌制,那么我应该先把它们放在一个数组中然后腌制吗?还是我应该继续倾销?
  • 是的,你应该这样做。但也可以将数据转储两次。看看我的更新。
  • @CosmicRabbitMediaInc:好吧,如果你有很多图像对象要腌制,它们应该已经在一个列表中。如果您将相同的代码复制并粘贴 40 次以使用 image_1image_2 等,请不要这样做。
  • @CosmicRabbitMediaInc:您可以将多个对象一个一个地写入同一个pickle文件,或者将它们全部放在一个容器中,就像一个列表一样,然后就这么写。后者可能会更快。请参阅my answer 你的问题被标记为重复。
【解决方案2】:

只需拨打pickle.dump,就可以拨打其他电话。您有一个 dict,其值都是简单类型(字符串、几个数字的元组等)。它来自图像这一事实无关紧要。

如果你有一堆,大概它们存储在一个列表或其他结构中,你可以腌制一个可腌制对象的列表。

所以:

with open('data.pkl', 'wb') as f:
    pickle.dump(images, f)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2018-08-21
    • 2011-04-05
    • 2016-03-27
    • 2020-12-31
    • 2020-04-07
    相关资源
    最近更新 更多