pytorch中张量Tensor和PIL Imgae、numpy(cv)格式的互相转换

1 篇文章 0 订阅
1 篇文章 0 订阅

python中图像的读取主要有两种方式:1.PIL Image;2.opencv读取
1.PIL image和 Tensor
PIL读取的文件主要是PIL格式,转化为Tensor张量只需要通过transforms.ToTensor()函数即可,而由tensor张量转换为PIL数据格式同样只需要函数transforms.ToPILImage()即可,如下面代码所示

image=Image.open('./VOCdevkit/VOC2012/JPEGImages/2011_003556.jpg')
image.show()
transform=transforms.ToTensor()
img=transform(image)
plt.figure()
plt.imshow(img)
uploader=transforms.ToPILImage()
img=uploader(img)
print(img)
img.show()

2.numpy格式和Tensor
图像数据转换为Tensor张量无非经过两个步骤,
1.通道维转换,由第三维转换为第一维 如果是多个样本就是第思维转换为第二维
2.数据归一化处理,又0—255的区间映射到0—1区间

所以按照这个步骤进行即可,另外注意要将opencv的BGR通道转换为RGB通道,由tensor逆推回numpy格式时则需要相反处理

image=cv2.imread('./VOCdevkit/VOC2012/JPEGImages/2011_003556.jpg')
print(image)
cv2.imshow("jj",image)
cv2.waitKey(0)
# numpy转化为tensor不可以使用ToTensor 而要手动修改
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
image=torch.from_numpy(image.transpose((2,0,1)))
image_tensor=image.float().div(255)
print(image_tensor)

# tensor转换为numpy格式
image=image_tensor.mul(255).byte()
image=image.numpy().transpose((1,2,0))
image=cv2.cvtColor(image,cv2.COLOR_RGB2BGR)
print(image)
cv2.imshow("hh",image)
cv2.waitKey(0)

这篇文章写的很详细
https://oldpan.me/archives/pytorch-tensor-image-transform

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值