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 相关文章推荐
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
Python脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
python斐波那契数列的计算方法
Sep 27 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
通过实例解析python and和or使用方法
Nov 14 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
完美解决PHP中文乱码
2009/11/26 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
永不消失的title提示代码
2007/02/15 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
2017/10/19 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
python如何对实例属性进行类型检查
2018/03/20 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python opencv实现证件照换底功能
2019/08/19 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
python环境下安装opencv库的方法
2020/03/05 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
init进程的作用
2015/08/20 面试题
设置器与访问器的定义以及各自特点
2016/01/08 面试题
介绍一些UNIX常用简单命令
2014/11/11 面试题
文明市民先进事迹
2014/05/15 职场文书
学习十八大的心得体会
2014/09/01 职场文书
初三语文教学计划
2015/01/22 职场文书
2015年团支书工作总结
2015/04/03 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP