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遍历目录的方法小结
Apr 28 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
python3中property使用方法详解
Apr 23 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
python操作excel让工作自动化
Aug 09 Python
python处理excel绘制雷达图
Oct 18 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
如何用Python提取10000份log中的产品信息
Jan 14 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 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面试题 试试看看你会不会也中招
2014/08/19 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
Python对象体系深入分析
2014/10/28 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
什么样的创业计划书可行性高?
2014/02/01 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL