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

本文介绍如何在使用OpenCV读取图像后将其颜色通道从BGR转换为RGB,以便正确显示图像颜色。通过使用PyTorch的transforms库中的Lambda函数实现这一目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题

使用如下方法将图像数据类型由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()

效果如下
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值