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中的select模块
Apr 23 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
python支付宝支付示例详解
Aug 22 Python
浅析PEP572: 海象运算符
Oct 15 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
浅析Python 条件控制语句
Jul 15 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 Python
python APScheduler执行定时任务介绍
Apr 19 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实现利用phpexcel导出数据
2013/08/24 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
vue.js的安装方法
2017/05/12 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
vant实现购物车功能
2020/06/29 Javascript
编写Python CGI脚本的教程
2015/06/29 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python实现梯度法 python最速下降法
2020/03/24 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
销售人员求职的自我评价分享
2014/03/15 职场文书
政协调研汇报材料
2014/08/15 职场文书
债务纠纷委托书
2014/08/30 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
2016年春节慰问信息
2015/03/25 职场文书
稽核岗位职责范本
2015/04/13 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis