[英]Python PIL image from array datatype error
我一直在使用 PIL 来掌握它,并想将图像拆分为它的 rgb 通道,然后将它重新组合在一起并显示它。
import PIL.Image as Img
import numpy as np
img = Img.new('RGB', (10,10), color = 'cyan')
r,g,b = img.split()
pixels = np.array([np.asarray(r),np.asarray(g),np.asarray(b)])
new_img = Img.fromarray(pixels.astype(np.uint8))
new_img.show()
当我运行该文件时,它返回一个错误:
File "C:\Program Files (x86)\Python38-32\lib\site-packages\PIL\Image.py", line 2716, in fromarray
raise TypeError("Cannot handle this data type: %s, %s" % typekey)
TypeError: Cannot handle this data type: (1, 1, 10), |u1
我也试过这样:
import PIL.Image as Img
import numpy as np
img = Img.new('RGB', (10,10), color = 'cyan')
r,g,b = img.split()
pixels = [np.asarray(r),np.asarray(g),np.asarray(b)]
new_img = Img.fromarray(pixels)
new_img.show()
我在哪里得到这个错误:
File "C:\Program Files (x86)\Python38-32\lib\site-packages\PIL\Image.py", line 2704, in fromarray
arr = obj.__array_interface__
AttributeError: 'list' object has no attribute '__array_interface__'
那么我该如何正确地将 r、g 和 b arrays 重新组合在一起呢?
RGB 图像是通过将 3 个彩色通道在 z 轴上一个一个叠加而成的。 类比见此图,
pixels = np.array([np.asarray(r),np.asarray(g),np.asarray(b)])
此命令将这 3 个彩色通道shape
放置,您可以使用
print(pixels.shape)
(3, 10, 10)
这对解释器没有意义,因此是错误消息。
RBG 图像中的每个像素都是红色、绿色和蓝色值的元组。
因此形状采用rows x cols x channels
的形式。 您可以通过使用np.stack
来实现这一点
pixels = np.stack([np.asarray(r),np.asarray(g),np.asarray(b)], axis = 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.