Pytorch 张量改变颜色

Pytorch tensor changing colors

如有任何帮助,我将不胜感激。

为什么将3d(图像)的张量放入4d张量后,图像颜色变了。

p = "path/to/image"
p = Image.open(p)
p = transforms.PILToTensor()(p)

transforms.ToPILImage()(p).show()  # ok  (left pic)
temp = torch.zeros(4, p.size()[0], p.size()[1], p.size()[2])
temp[0] = p
transforms.ToPILImage()(temp[0]).show()  # not ok  (right pic)

  • 原因是第一个张量 p 是整数张量,值范围在 0 - 255 之间。第二个图像是浮点张量,值范围在 0.0 - 255.0 之间。 imshow 函数需要 0 - 255 之间的整数值或 0 - 1 之间的浮点值,您可以阅读更多 here.

要解决此问题,您有两种选择,要么在定义 temp 张量时添加 dtype=torch.uint8,要么将张量的值除以 255 以在 0 -1 之间缩放。

# cell 1
from PIL import Image
from torchvision import transforms
import torch
from matplotlib import pyplot as plt

p = Image.open("pi.png")
p = transforms.PILToTensor()(p).permute(1, 2, 0)
plt.imshow( p )     #ok 

# cell 2
temp = torch.zeros(4, p.size()[0], p.size()[1], p.size()[2], dtype=torch.uint8)
temp[0] = p
plt.imshow(temp[0]) # or you can use plt.imshow(temp[0]/255)