PyTorch: 各种图像格式相互转化

我们一般在PyTorch或者Python中处理的图像无非这几种格式:

  • PIL:使用Python自带图像处理库读取出来的图片格式;
  • numpy:使用python-opencv库读取出来的图片格式;
  • tensor:pytorch中训练时所采取的向量格式(当然也可以说图片).

注意,本文所述图片格式皆为RGB三通道,24-bit真彩色,也就是我们平常使用的图片形式。

下述代码均引用了:

import cv2
import torch
from PIL import Image
import matplotlib.pyplot as plt# loader使用torchvision中自带的transforms函数
loader = transforms.Compose([transforms.ToTensor()])  unloader = transforms.ToPILImage()

PIL读取图片转化为Tensor

# 输入图片地址, 返回tensor变量
def image_loader(image_name):image = Image.open(image_name).convert('RGB')image = loader(image).unsqueeze(0)return image.to(device, torch.float)
# 输入PIL格式图片, 返回tensor变量
def PIL_to_tensor(image):image = loader(image).unsqueeze(0)return image.to(device, torch.float)

Tensor转化为PIL图片

# 输入tensor变量, 输出PIL格式图片
def tensor_to_PIL(tensor):image = tensor.cpu().clone()image = image.squeeze(0)image = unloader(image)return image

直接展示Tensor格式图片

def imshow(tensor, title=None):image = tensor.cpu().clone()  # we clone the tensor to not do changes on itimage = image.squeeze(0)  # remove the fake batch dimensionimage = unloader(image)plt.imshow(image)if title is not None:plt.title(title)plt.pause(0.001)  # pause a bit so that plots are updated

直接保存Tensor格式图片

def save_image(tensor, **para):dir = 'results'image = tensor.cpu().clone()  # we clone the tensor to not do changes on itimage = image.squeeze(0)  # remove the fake batch dimensionimage = unloader(image)if not osp.exists(dir):os.makedirs(dir)image.save('results_{}/s{}-c{}-l{}-e{}-sl{:4f}-cl{:4f}.jpg'.format(num, para['style_weight'], para['content_weight'], para['lr'], para['epoch'],para['style_loss'], para['content_loss']))

Numpy转化为Tensor

def toTensor(img):assert type(img) == np.ndarray,'the img type is {}, but ndarry expected'.format(type(img))img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)img = torch.from_numpy(img.transpose((2, 0, 1)))return img.float().div(255).unsqueeze(0)  # 255也可以改为256

Tensor转化为Numpy

def tensor_to_np(tensor):img = tensor.mul(255).byte()img = img.cpu().numpy().squeeze(0).transpose((1, 2, 0))return img

展示Numpy格式图片

def show_from_cv(img, title=None):img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)plt.figure()plt.imshow(img)if title is not None:plt.title(title)plt.pause(0.001)

展示Tensor格式图片

def show_from_tensor(tensor, title=None):img = tensor.clone()img = tensor_to_np(img)plt.figure()plt.imshow(img)if title is not None:plt.title(title)plt.pause(0.001)

注意: 上面介绍的都是一张图片的转化,如果是n张图片一起的话,只需要修改一下相应代码即可。

# 将 N x H x W X C 的numpy格式图片转化为相应的tensor格式
def toTensor(img):img = torch.from_numpy(img.transpose((0, 3, 1, 2)))return img.float().div(255).unsqueeze(0)

PyTorch: 各种图像格式相互转化相关推荐

  1. python代码转换为pytorch_Pytorch中Tensor与各种图像格式的相互转化详解

    前言 在pytorch中经常会遇到图像格式的转化,例如将PIL库读取出来的图片转化为Tensor,亦或者将Tensor转化为numpy格式的图片.而且使用不同图像处理库读取出来的图片格式也不相同,因此 ...

  2. Pytorch中的variable, tensor与numpy相互转化的方法

    来源:https://blog.csdn.net/pengge0433/article/details/79459679 在使用pytorch作为深度学习的框架时,经常会遇到变量variable.张量 ...

  3. Pytorch中的variable, tensor与numpy相互转化

    来源:https://blog.csdn.net/m0_37592397/article/details/88327248 1.将numpy矩阵转换为Tensor张量 sub_ts = torch.f ...

  4. Python数据类型、Numpy数据类型和Pytorch中的tensor类型间的相互转化

    数据类型包括Python数据类型.Numpy数据类型和Pytorch中的tensor,Pytorch中的tensor又包括CPU上的数据类型和GPU上的数据类型. 一.Python数据类型 Pytho ...

  5. pytorch 图像与tensor转换

    Pytorch中Tensor与各种图像格式的相互转化 在pytorch中经常会遇到图像格式的转化,例如将PIL库读取出来的图片转化为Tensor,亦或者将Tensor转化为numpy格式的图片.而且使 ...

  6. PyTorch 安装和基本运算— Tensor 的数据类型(浮点型、整型、随机浮点型等)、基本运算(绝对值、求和、裁剪、求商、求积、求幂等)、Tensor 与 Numpy 转换

    PyTorch 的安装可以到官网 https://pytorch.org/,选择适合自己机器以及安装方式,执行对应的命令即可. 除了安装 PyTorch 之外,建议也安装 torchvision 包. ...

  7. 深度学习之Pytorch基础教程!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,Datawhale高校群成员,深圳大学 随着深度学习的发展 ...

  8. 轻松学Pytorch – 年龄与性别预测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 大家好,上周太忙,没有更新Pytorch轻松学系列文章,但是我还是 ...

  9. 小白入门PyTorch | 第一篇:什么是PyTorch?

    什么是PyTorch? 这是一个基于Python的科学计算包,主要分入如下2部分: 使用GPU的功能代替numpy 一个深刻的学习研究平台,提供最大的灵活性和速度 开始学习 Tensors (张量) ...

最新文章

  1. kint 一个强大的php调试助手
  2. Python语言的特点
  3. 类型重定义 头文件预编译设置
  4. 文巾解题 620. 有趣的电影
  5. 我们距离“云”还有多远?
  6. 个人对于MySQL的理解_MySQL锁的理解
  7. python数据分析多久能学会_周末深夜,学妹说她想做Python数据分析师....
  8. 【原创】大数据基础之Spark(1)Spark Submit即Spark任务提交过程
  9. 基于SSM的家具商城系统
  10. Playing Atari with Deep Reinforcement Learning 中文 讲解2
  11. 利用代码分别实现jdk动态代理和cglib动态代理_设计模式篇——代理模式详解(面试官再问你代理模式,这么回答他!)...
  12. 高德地图坐标拾取组件
  13. ct扫描方式有哪些_日联科技x-ray:工业CT是怎么进行X射线的断层扫描的
  14. 【音视频】WIN8|WIN10的桌面采集技术-DXGI(一)
  15. 提示计算机未安装flash,win10系统提示未安装Flash的解决方法
  16. uniapp点击生成商品海报、下载海报、分享海报
  17. pad 锁定屏幕显示方向为竖屏正方向
  18. Cad二次开发小工具
  19. 《数据结构学习笔记》-持续记录
  20. 1.6.6 解释器 Interpreter

热门文章

  1. 栈、队列(链表实现)
  2. 智能车学习(一)—— 硬件准备
  3. 树形dp——cf1010D
  4. 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
  5. 2017-9-5-Java 泛型
  6. SpringBoot中.properties文件中配置项显示到页面中文乱码解决
  7. display环境变量如何配置_JDK 安装 Java环境变量配置
  8. 死磕 java同步系列之AQS起篇
  9. 前端每周清单第 39 期: OpenAI 与 gRPC, Gitlab 的 Vue 年度总结,GraphQL 技术栈漫游
  10. 查看CentOS系统版本,Linux内核版本,32位还是64位