[3D RGB numpy数组到图像文件,导致TypeError

问题描述 投票:0回答:1
from PIL import Image

array = np.zeros((3,64,64),'uint8')
array[0] = redToImage;
array[1] = blueToImage;
array[2] = greenToImage;

img = Image.fromarray(array)
if img.mode != 'RGB':
   img = img.convert('RGB')
img.save('testrgb.jpg')

我有redToImageblueToImagegreenToImage,它们都是大小为(64,64)的numpy数组。但是,当我尝试从数组创建图像时,它给了我这个错误。我真的搜寻过并尝试过很多方法。

它出现此错误:

***---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\PIL\Image.py in fromarray(obj, mode)
   2514             typekey = (1, 1) + shape[2:], arr['typestr']
-> 2515             mode, rawmode = _fromarray_typemap[typekey]
   2516         except KeyError:
KeyError: ((1, 1, 64), '|u1')
During handling of the above exception, another exception occurred:
TypeError                                 Traceback (most recent call last)
<ipython-input-331-9ce9e6816b75> in <module>
      6 array[2] = greenToImage;
      7
----> 8 img = Image.fromarray(array)
      9 if img.mode != 'RGB':
     10     img = img.convert('RGB')
~\Anaconda3\lib\site-packages\PIL\Image.py in fromarray(obj, mode)
   2515             mode, rawmode = _fromarray_typemap[typekey]
   2516         except KeyError:
-> 2517             raise TypeError("Cannot handle this data type")
   2518     else:
   2519         rawmode = mode
TypeError: Cannot handle this data type***
python numpy image-processing
1个回答
0
投票

键入错误表示Image.fromarray(array)无法自动将(3,64,64)矩阵重塑为(64,64,3)矩阵。 fromarray(x)期望x将包含3层或64x64块,而不是64层的3x64块。将您的代码更改为类似于以下内容的代码将产生所需的结果(在我的情况下为绿色的64x64像素.jpg图像)。

from PIL import Image
import numpy as np

array = np.zeros((64, 64, 3), 'uint8')

'''
Creating dummy versions of redToImage, greenToImage and blueToImage.
In this example, their combination denotes a completely green 64x64 pixels square.
'''
array[:, :, 0] = np.zeros((64, 64))
array[:, :, 1] = np.ones((64, 64))
array[:, :, 2] = np.zeros((64, 64))

img = Image.fromarray(array)
if img.mode != 'RGB':
    img = img.convert('RGB')
img.save('testrgb.jpg')
© www.soinside.com 2019 - 2024. All rights reserved.