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批量同步web服务器代码核心程序
Sep 01 Python
python解决网站的反爬虫策略总结
Oct 26 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
代码详解django中数据库设置
Jan 28 Python
python pandas时序处理相关功能详解
Jul 03 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
Python中的延迟绑定原理详解
Oct 11 Python
Django框架创建项目的方法入门教程
Nov 04 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
python和c语言哪个更适合初学者
Jun 22 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
PHP缓存技术的使用说明
2011/08/06 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
PHP错误处理函数
2016/04/03 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
子页向父页传值示例
2013/11/27 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
如何快速上手Vuex
2017/02/14 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
jquery+php后台实现省市区联动功能示例
2019/05/23 jQuery
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
Python子类继承父类构造函数详解
2019/02/19 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
python爬虫要用到的库总结
2020/07/28 Python
南京某软件公司的.net面试题
2015/11/30 面试题
优纳科技软件测试面试题
2012/05/15 面试题
入党思想汇报怎么写
2014/04/03 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
平遥古城导游词
2015/02/03 职场文书
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS