[英]3D RGB Numpy Array to Image File causing TypeError
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')
I have redToImage
, blueToImage
, greenToImage
and all of them is a numpy array with (64,64) size.我有redToImage
、 blueToImage
、 greenToImage
,它们都是一个大小为 (64,64) 的 numpy 数组。 However when I try to create image from array, it gives me that error.但是,当我尝试从数组创建图像时,它给了我那个错误。 I really searched and tried lots of methods.我真的搜索并尝试了很多方法。
It gives this error:它给出了这个错误:
***---------------------------------------------------------------------------
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***
The typing error says that Image.fromarray(array)
cannot automatically reshape a (3, 64, 64) matrix to a (64, 64, 3) matrix.输入错误表示Image.fromarray(array)
无法自动将 (3, 64, 64) 矩阵重塑为 (64, 64, 3) 矩阵。 fromarray(x)
expects that x
will contain 3 layers or 64x64 blocks instead of 64 layers of 3x64 blocks. fromarray(x)
预计x
将包含 3 层或 64x64 块,而不是 64 层 3x64 块。 Changing your code to something similar as below produces the desired result (in my case a green 64x64 pixels .jpg image).将您的代码更改为类似于下面的内容会产生所需的结果(在我的情况下为绿色 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')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.