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处理csv数据的方法
Mar 11 Python
对python3 urllib包与http包的使用详解
May 10 Python
django 解决manage.py migrate无效的问题
May 27 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
python如何读取bin文件并下发串口
Jul 05 Python
Django用户认证系统 组与权限解析
Aug 02 Python
PyQt5实现登录页面
May 30 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
pandas DataFrame运算的实现
Jun 14 Python
python连接mysql有哪些方法
Jun 24 Python
Django+RestFramework API接口及接口文档并返回json数据操作
Jul 12 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 Echo字符串的连接格式
2016/03/07 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python学习笔记_数据排序方法
2014/05/22 Python
python中Genarator函数用法分析
2015/04/08 Python
Python中title()方法的使用简介
2015/05/20 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
毕业自荐书
2013/12/09 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
双创工作实施方案
2014/03/26 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android