在指示的行中,我从以下 Python3 代码中收到错误消息。x、y 和 z 都是相同的普通 2D numpy 数组,但大小相同,并且应该工作相同。然而它们的行为不同,y 和 z 崩溃,而 x 工作正常。
import numpy as np
from PIL import Image
a = np.ones( ( 3,3,3), dtype='uint8' )
x = a[1,:,:]
y = a[:,1,:]
z = a[:,:,1]
imx = Image.fromarray(x) # ok
imy = Image.fromarray(y) # error
imz = Image.fromarray(z) # error
但这有效
z1 = 1*z
imz = Image.fromarray(z1) # ok
错误是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python3\lib\site-packages\PIL\Image.py", line 1918, in fromarray
obj = obj.tobytes()
AttributeError: 'numpy.ndarray' object has no attribute 'tobytes'
那么 x, y, z, z1 有什么不同呢?没有什么我能说的。
>>> z.dtype
dtype('uint8')
>>> z1.dtype
dtype('uint8')
>>> z.shape
(3, 4)
>>> z1.shape
(3, 4)
我在 Windows 7 Enterprise 机器上使用 Python 3.2.3,一切都是 64 位。