如何从 numpy float32 数组创建图像?

新手上路,请多包涵

我有一个 numpy.ndarray 数组,其中包含 float32 的值。图片尺寸应为 226×226。我尝试使用 PIL.Image 创建图像,但出现错误。我读到 PIL.Image.fromarray 需要一个对象和模式,对于浮点数,我需要调用 fromarray'F' 我试过了。

这就是我试图做的:

 from PIL import Image
img = Image.fromarray(slice56, mode='F')
#type(slice56) = <type 'numpy.ndarray'>
#slice56 = array([ 0.,  0.,  0., ...,  0.,  0.,  0.], dtype=float32)

我得到这个错误:

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/site-packages/PIL/Image.py", line 1860, in fromarray
    return frombuffer(mode, size, obj, "raw", mode, 0, 1)
  File "/usr/lib64/python2.6/site-packages/PIL/Image.py", line 1805, in frombuffer
    return apply(fromstring, (mode, size, data, decoder_name, args))
  File "/usr/lib64/python2.6/site-packages/PIL/Image.py", line 1743, in fromstring
    im = new(mode, size)
  File "/usr/lib64/python2.6/site-packages/PIL/Image.py", line 1710, in new
    return Image()._new(core.fill(mode, size, color))
TypeError: argument 2 must be sequence of length 2, not 1

任何人都可以提出一个想法如何去做吗?或者如何解决这个错误?

原文由 Idan.c 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 798
2 个回答

我同意 DavidG 的回答是从 numpy 数组绘制图像的快速解决方案。但是,如果您有充分的理由坚持使用 PIL.Image ,那么最接近您已经完成的方法是这样的:

 from PIL import Image
import numpy as np

slice56 = np.random.random((226, 226))

# convert values to 0 - 255 int8 format
formatted = (slice56 * 255 / np.max(slice56)).astype('uint8')
img = Image.fromarray(formatted)
img.show()

然后它会产生如下所示的给定随机数:

太平船务图片

原文由 jtitusj 发布,翻译遵循 CC BY-SA 4.0 许可协议

scipy.misc 是我最喜欢的方式。它更干净,而且只需一行即可完成。看看它有多好:

 import scipy.misc
img = scipy.misc.toimage(slice56, mode='L')

在此处 查看官方文档。

原文由 NKSHELL 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题