【opencv】图像数据类型由numpy转为tensor后颜色改变

一、问题

使用如下方法将图像数据类型由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】图像数据类型由numpy转为tensor后颜色改变_第1张图片

二、解决

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()

效果如下
【opencv】图像数据类型由numpy转为tensor后颜色改变_第2张图片

你可能感兴趣的:(图像处理,各路问题汇总,opencv,numpy,python,图像处理)