将RGB数组转换成PIL图像

3

在我的代码中,我创建了一个RGB数组(256 * 256 * 3),我需要展示它。 但我在从RGB数组中创建PIL图像方面遇到了困难。 以下是我编写的代码以进行说明:

import numpy as np
from PIL import Image

image = Image.open('img_test.png')
image.thumbnail((256, 256))
image = image.convert("RGB")
image = np.asarray(image, dtype=np.float32) / 255

PIL.Image.fromarray(image, "RGB").show()

我得到了这张图片:

在此输入图片描述

如果我使用

import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()

我得到了这张图片:

输入图像描述

这行代码有什么问题?

PIL.Image.fromarray(image, "RGB").show()
3个回答

3

只需做

Image.fromarray(np.array(img).astype(np.uint8).transpose(1,2,0))

1
.astype(np.uint8) 解决了我的问题 - 我的图像大小为 H x W x C。 - virgesmith
我认为在使用 np.asarray(img) 时,反转置操作是 .transpose(2,0,1) - Sterling

2
您期望 PIL 处理一个 32 位浮点 RGB 图像,但它不能 - 可以在 这里 查看。
它可以处理以下内容之一:
  • RGB 作为三个 8 位整数值 (RGB888),或
  • 灰度 float32。

1
您提到的代码行看起来很好,但我想知道为什么要这样做:
image = np.asarray(image, dtype=np.float32) / 255

如果您用以下代码替换该行,它可以使用PIL或matplotlib来显示图像:
image = np.asarray(image)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接