【发布时间】:2011-03-24 00:27:59
【问题描述】:
import Image
from numpy import zeros, asarray
YUV = zeros((240, 320, 3), dtype='uint8')
im = Image.fromarray(YUV, mode="YCbCr")
blah = asarray(im)
当我运行它(Py 2.7.1 上的 IPython 0.10.1)时,它似乎让 python 读取了一些它不应该读取的内存。有时它会崩溃,有时它不会崩溃,但我肯定可以通过将 320x240 零增加到 3200x2400 和/或调用 blah.copy() 来使其崩溃。另外,如果我这样做:
from matplotlib import pyplot as p
p.subplot(221); p.imshow(blah[:,:,0])
p.subplot(222); p.imshow(blah[:,:,1])
p.subplot(223); p.imshow(blah[:,:,2])
p.subplot(224); p.imshow(blah[:,:,3])
p.gray()
p.show()
我开始看到垃圾内存出现在大约第 180 行的 blah 中。这是怎么回事?我是否以不好的方式从 PIL Image 转换为 numpy 数组?使用 array(im) 而不是 asarray(im) 有什么区别,什么是首选? (请注意,在前一种情况下,它有时仍然会崩溃,但它似乎更稳定且垃圾更少)
(这是related question)
【问题讨论】:
标签: python arrays numpy python-imaging-library