python - TypeError:无法处理此数据类型 - `PIL.Image.fromarray` 的模式错误?
问题描述
我正在尝试使用PIL.Image.fromarray
:
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
a = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]]])
im = Image.fromarray(a, mode="RGB")
im.save("test.png")
plt.imshow(im)
plt.show()
我希望看到 3 个像素的红色、绿色和蓝色。
但是,如果我省略mode
了文档示例中所示的关键字参数,我会得到:
TypeError:无法处理此数据类型
如果我设置mode="RGB"
,保存的图像文件test.png
和matplotlib
窗口都如下所示:
解决方案
堆叠你的三个数组并uint8
根据这个和这个答案将它们转换为类型。
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
a = (np.dstack(([255, 0, 0],[0, 255, 0],[0, 0, 255]))).astype(np.uint8)
im = Image.fromarray(a, mode="RGB")
im.save("test.png")
plt.imshow(im)
plt.show()
另一种选择是为您的输入数组添加额外的维度,使其具有形状(1, 3, 3)
a = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]]], dtype=np.uint8)
im = Image.fromarray(a, mode="RGB")
推荐阅读
- performance - RMSE 和平均目标变量
- joomla - Joomla - 替换共享链接中的网站图标
- node.js - 单击按钮时如何获取我在文本框中输入的值?
- php - PHP 致命错误:在 GCP 平台上调用未定义函数 curl_init()
- angular - 如何从 Angular 7 typecsript 禁用 FullCalendar 中的上一个按钮
- java - Spring JpaSpecificationExecutor 没有找到类型 Alarm 的属性 findAll
- bazel - 在 Bazel 中打印一种目标
- javascript - 在数组中设置随机位置(JS)
- azure - 如何将 azure 上的数据从一个资源组复制到另一个资源组?
- elasticsearch - elasticsearch中频繁更新的影响