首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PIL不形成图像

PIL不形成图像
EN

Stack Overflow用户
提问于 2022-01-01 17:18:36
回答 2查看 122关注 0票数 0

我是PIL的新手,所以我一直在玩这个游戏:

代码语言:javascript
复制
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行给出了以下错误:TypeError 无法处理此数据类型:(1,1,3),,但令人惊讶的是,当我使用与相同数组完全相同的图像image_array = np.array(Image.open('Image.png'))时,它不会给我一个错误:Image.png (图像非常小,3乘3像素)

似乎没有其他人有同样的问题,或者我只是遗漏了一些东西

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-01 18:52:41

使用数据类型转换尝试这一点,或者首先使用dtype=np.unit8参数定义数组。

相关的答案(不同的问题)也可以找到这里。-

代码语言:javascript
复制
img = Image.fromarray(image_array.astype(np.uint8)) #<---
img.width, img.height
代码语言:javascript
复制
(3,3)

或者,首先使用np.array([[],[],[]], dtype=np.uint8),如果内存是问题的话。

此外,如果要将数组构建为int64,只需使用copy=False返回原始数组而不是副本,然后再将其交给PIL。

代码语言:javascript
复制
image_array.astype(np.unit8, copy=False)
票数 2
EN

Stack Overflow用户

发布于 2022-01-01 20:59:41

当您创建图像数组时:

代码语言:javascript
复制
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。你可以用以下方法检查:

代码语言:javascript
复制
print(image_array.dtype)

因此,它将需要8倍的内存比需要。与其创建不必要大的东西,然后再创建另一个版本,现在需要9倍的RAM,我建议您首先使用正确的类型创建它。因此,请使用:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70550508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档