pytorch中图片类型的转换——PIL、tensor、numpy

pytorch中图片类型的转换——PIL、tensor、numpy

前言

在计算机视觉任务中,大多数时候都涉及到图片的加载、训练以及训练结果的可视化。在实操过程中,经常会遇到图片各种类型之间的转换问题。本文主要是对笔者在学习过程中所遇到的一些问题的总结,以便自己日后查阅方便。如有错误,请不吝赐教。

图片的读入

通常是有两种读入方式,分别是用PIL中的Image读入和用openCV读入。PIL(Python Imaging Library)是Python中最基础的图像处理库,OpenCV是一个很强大的图像处理库,适用面更广。两种读入方式是有区别的,主要有以下几个区别

  • 图片格式不同,Image读入的是“RGB”,Opencv读入的是“BGR”。
  • 读入图片的尺寸不同,Image读入的是 w h,Opencv读入的是h w c。其中w是宽,h是高,c是通道数。
  • Image读入是Image类无法直接显示其像素点的值(可以转换成numpy显示),Opencv读入的直接是numpy的格式。可以直接显示其像素值。

代码演示

  • 导入包(以前所有代码运行需要提前导入的包)
import os.path
from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torchvision.transforms as standard_transforms
  • 读入
#Iamge.open(path).convert("RGB") 
#cv2.imread(path)
image = Image.open("1.jpg").convert("RGB")
image2 = cv2.imread("1.jpg")
print("Image read",image.size)  # w h
print("Opencv read",image2.shape)  # h w c
print(image)
print(image2)
  • result如下,可以看到Image读入的是无法直接显示的。
    在这里插入图片描述

图片的转换

在视觉任务中加载图片通常要将其变为tensor,才能参与训练。下面将描述如何将读入的图片变成tensor,或者将tensor转成能够直接显示的图片格式(tensor类型的图片是无法直接可视化的)

PIL与tensor的相互转换

PIL和tensor的相互转换,要利用torchision中transforms中的一些类。PIL转tensor用里面的ToTensor转PIL用里面的ToPILImage类(这个类也可以将numpy格式的转为PIL)。

  • 首先定义两个transform,以便接下来使用
transform1 = standard_transforms.ToTensor()
transform2 = standard_transforms.ToPILImage()
  • 将上一节中的image转为tensor。要注意的是转为tensor后图片中像素点的方式也发生了变化,会将 w,h,c变为c,h,w,并且像素值由[0,255]变成了[0,1]

  • 另外通常对于tensor要变为(n,c,w,h),这时候要用到unsqueeze(x) 是增加一维squeeze(x) 去掉维度为1的维度。其中x是对dim=x的进行增或者减

image = Image.open("1.jpg").convert("RGB")
imag
  • 24
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值