繁体   English   中英

Python PIL 图像来自数组数据类型错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM