示された行で、次の Python3 コードからエラーが発生しています。x、y、および z はすべてプレーンな 2D numpy 配列であり、サイズは同じですが、同じように動作するはずです。それでも、x が正常に動作している間に y と z がクラッシュするなど、動作が異なります。
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 ビットです。