CV2,Image,PIL图片读取,并且与Tensor相互转化并展示

通过以下学习,可以在进行深度学习过程中,随意挑出图片进行展示,通过Tensor转化为numpy或者是PIL进行查看。

1 图片读取

读取方式读入的格式RGB顺序HWC顺序
cv2.imread(path)numpy.ndarrayBGRH、W、C
plt.imread(path)numpy.ndarrayRGBH、W、C
Image.open(path)PILRGBH、W、C

2 图片展示

都用plt.imshow() 展示就行了,太完美了,不过plt展示需要的是RGB顺序,所以展示cv2的图片会出现问题,但是只需要重构一下顺序就行了

举例:
在这里插入图片描述

这里的im_cv出现色彩失调问题,就是因为读入的是BGR,而plt展示的是按照RGB进行展示的,解决方法如下:

修改cv2的BGR顺序重新展示:
在这里插入图片描述

就是对cv2读取的数据进行RGB重构

3 ndarry和PIL相互转化

目的方式
ndarry -> PILimg = Image.fromarray(img.astype(“uint8”)).convert(“RGB”)
PIL -> ndarryimg = np.array(img)

举例:

'''PIL转成numpy数组:'''
img = Image.open(img_path)
print(type(img))  #<class 'PIL.Image.Image'>
img = np.array(img)  
print(type(img))  #<class 'numpy.ndarray'>
print('PIL',img.shape)  #(H,W,C)
'''numpy 转成 PIL'''
#input img is numpy type
img = Image.fromarray(img.astype('uint8')).convert('RGB')
print(type(img))    #<class 'PIL.Image.Image'>

4 Tensor与ndarry和PIL相互转化

目的方式
PIL、ndarry -> Tensortransforms.ToTensor()
Tensor -> PILtransforms.ToPILImage()
Tensor -> ndarry.numpy()

Tensor 实际上就是ndarry数据类型加上自动微分的功能,所以将Tensor转化为ndarry只需要用.numpy()即可

5 例子

5.1 Tensor -> PIL -> 显示

在这里插入图片描述

Tensor通过ToPILImage() 进行转换,通道都不用改变,转换后的数据类型可以直接通过plt进行显示

5.2 Tensor -> ndarry ->显示

在这里插入图片描述

cv2的图片进行转为Tensor再转为图片,如果想要正常显示,需要进行数据扩大和astype操作,同时,因为TensorCHW形式的,所以转为ndarry,也需要通过np.transpose转换一下维度。

剩下的一种使用plt进行读入,抓为Tensor,再转为ndarry可以自己动手练一下,比5.2还要简单一点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philo`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值