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)
如有任何帮助,我将不胜感激。
为什么将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)