一、问题
使用如下方法将图像数据类型由numpy转为tensor
# 读取图像
img = cv.imread('../imgs/person_fiona.jpg', 1) # read an image
# 图像数据类型转换
transform1 = transforms.Compose([
transforms.ToTensor(),
])
img = transform1(img)
# 更换数据维度顺序以便于plt显示图像
img = img.permute(1, 2, 0)
plt.imshow(img)
plt.show()
效果如下
二、解决
opencv读取图片的颜色通道顺序为BGR,因此直接转换会导致图片颜色变化,需要将通道顺序改为RGB,在这里使用lambda函数(仅添加了第七行)
# 读取图像
img = cv.imread('../imgs/person_fiona.jpg', 1) # read an image
# 图像数据类型转换
transform1 = transforms.Compose([
transforms.ToTensor(),
# opencv读取图片的颜色通道顺序为BGR,因此直接转换会导致图片颜色变化,这里将通道顺序改为RGB
transforms.Lambda(lambda x: x[torch.LongTensor([2, 1, 0])])
])
img = transform1(img)
# 更换数据维度顺序以便于plt显示图像
img = img.permute(1, 2, 0)
plt.imshow(img)
plt.show()
效果如下