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项目发布为exe可执行程序过程分享
Oct 23 Python
详解Python中的__new__()方法的使用
Apr 09 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
Tornado 多进程实现分析详解
Jan 12 Python
深入理解Python爬虫代理池服务
Feb 28 Python
python实现日常记账本小程序
Mar 10 Python
python实现三维拟合的方法
Dec 29 Python
Django如何防止定时任务并发浅析
May 14 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
Python实现电视里的5毛特效实例代码详解
May 15 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
Python Matplotlib简易教程(小白教程)
Jul 28 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/07/28 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
详解Python的单元测试
2015/04/28 Python
python3音乐播放器简单实现代码
2020/04/20 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Django用户身份验证完成示例代码
2020/04/03 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
小学六年级学生评语
2014/04/22 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
排查整治工作方案
2014/06/09 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
设备收款委托书范本
2014/10/02 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
经费申请报告范文
2015/05/18 职场文书
乱世佳人观后感
2015/06/08 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python