torch 中各种图像格式转换的实现方法


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

PIL与Tensor相互转换

import torch
from PIL import Image
import matplotlib.pyplot as plt

# loader使用torchvision中自带的transforms函数
loader = transforms.Compose([
 transforms.ToTensor()]) 

unloader = transforms.ToPILImage()

# 输入图片地址
# 返回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格式图片
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 it
 image = image.squeeze(0) # remove the fake batch dimension
 image = 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 it
 image = image.squeeze(0) # remove the fake batch dimension
 image = 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相互转换

import cv2
import torch
import matplotlib.pyplot as plt

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

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

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)


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)

参考:https://3water.com/article/177291.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
python之pandas用法大全
Mar 13 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python3.4解释器用法简单示例
Mar 22 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
浅谈django url请求与数据库连接池的共享问题
Aug 29 Python
Python使用贪婪算法解决问题
Oct 22 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 Python
django数据模型中null和blank的区别说明
Sep 02 Python
Django 如何实现文件上传下载
Apr 08 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 Python
python两个_多个字典合并相加的实例代码
Dec 26 #Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 #Python
python requests模拟登陆github的实现方法
Dec 26 #Python
python 实现按对象传值
Dec 26 #Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 #Python
Pandas时间序列:重采样及频率转换方式
Dec 26 #Python
Python高阶函数、常用内置函数用法实例分析
Dec 26 #Python
You might like
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
php缓存技术详细总结
2013/08/07 PHP
php实现简单的上传进度条
2015/11/17 PHP
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
Cython 三分钟入门教程
2009/09/17 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
Python猴子补丁知识点总结
2020/01/05 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
交通事故私了协议书
2014/04/16 职场文书
成绩单家长评语大全
2014/04/16 职场文书
物业消防安全责任书
2014/07/23 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
道德与公民自我评价
2015/03/09 职场文书
2015年工程部工作总结
2015/04/30 职场文书