PIL 未形成图像
PIL Not Forming An Image
我是 PIL 的新手,所以我在玩这些函数:
from PIL import Image
import numpy as np
image_array = np.array([
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]],
[[255, 255, 255],
[0, 0, 0],
[255, 255, 255]],
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]]])
image = Image.fromarray(image_array)
image.show()
然而,当我想使用它时,它在第 13 行给我以下错误:
类型错误
无法处理此数据类型:(1, 1, 3),
但令人惊讶的是,当我使用 image_array = np.array(Image.open('Image.png'))
这是完全相同的图像和完全相同的数组时,它没有给我一个错误:
Image.png
(图片很小,3×3像素)
似乎没有其他人遇到同样的问题,或者我只是遗漏了什么
尝试使用 datatype conversion 或使用 dtype=np.unit8
参数定义数组作为开头。
也可以找到相关答案(不同的问题)。 -
img = Image.fromarray(image_array.astype(np.uint8)) #<---
img.width, img.height
(3,3)
或者,如果内存有问题,只需使用 np.array([[],[],[]], dtype=np.uint8)
开始。
此外,如果你想构建一个数组作为int64,只需使用copy=False
到return原始数组而不是副本,然后再将其交给PIL。
image_array.astype(np.unit8, copy=False)
当您创建图像数组时:
image_array = np.array([
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]],
[[255, 255, 255],
[0, 0, 0],
[255, 255, 255]],
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]]])
它将是 int64
,而不是 np.uint8
。您可以通过以下方式检查:
print(image_array.dtype)
所以它需要比必要多 8 倍的 RAM。我建议您首先使用正确的类型创建它,而不是创建不必要的大东西然后通过创建现在需要 9 倍 RAM 的另一个版本来更正它。所以,使用:
image_array = np.array([
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]],
[[255, 255, 255],
[0, 0, 0],
[255, 255, 255]],
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]]], dtype=np.uint8)
我是 PIL 的新手,所以我在玩这些函数:
from PIL import Image
import numpy as np
image_array = np.array([
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]],
[[255, 255, 255],
[0, 0, 0],
[255, 255, 255]],
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]]])
image = Image.fromarray(image_array)
image.show()
然而,当我想使用它时,它在第 13 行给我以下错误:
类型错误
无法处理此数据类型:(1, 1, 3), image_array = np.array(Image.open('Image.png'))
这是完全相同的图像和完全相同的数组时,它没有给我一个错误:
Image.png
(图片很小,3×3像素)
似乎没有其他人遇到同样的问题,或者我只是遗漏了什么
尝试使用 datatype conversion 或使用 dtype=np.unit8
参数定义数组作为开头。
也可以找到相关答案(不同的问题)
img = Image.fromarray(image_array.astype(np.uint8)) #<---
img.width, img.height
(3,3)
或者,如果内存有问题,只需使用 np.array([[],[],[]], dtype=np.uint8)
开始。
此外,如果你想构建一个数组作为int64,只需使用copy=False
到return原始数组而不是副本,然后再将其交给PIL。
image_array.astype(np.unit8, copy=False)
当您创建图像数组时:
image_array = np.array([
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]],
[[255, 255, 255],
[0, 0, 0],
[255, 255, 255]],
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]]])
它将是 int64
,而不是 np.uint8
。您可以通过以下方式检查:
print(image_array.dtype)
所以它需要比必要多 8 倍的 RAM。我建议您首先使用正确的类型创建它,而不是创建不必要的大东西然后通过创建现在需要 9 倍 RAM 的另一个版本来更正它。所以,使用:
image_array = np.array([
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]],
[[255, 255, 255],
[0, 0, 0],
[255, 255, 255]],
[[0, 0, 0],
[255, 255, 255],
[0, 0, 0]]], dtype=np.uint8)