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实现linux服务器批量修改密码并生成execl
Apr 22 Python
简单介绍Python中的floor()方法
May 15 Python
python实现DES加密解密方法实例详解
Jun 30 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
Python参数类型以及常见的坑详解
Jul 08 Python
python3字符串操作总结
Jul 24 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
在Python 的线程中运行协程的方法
Feb 24 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 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上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php编程每天必学之验证码
2016/03/03 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
中层干部竞争上岗演讲稿
2014/01/13 职场文书
初中学生评语大全
2014/04/24 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android