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中的is和id用法分析
Jan 26 Python
python 统计代码行数简单实例
May 04 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
python 梯度法求解函数极值的实例
Jul 10 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
python SVM 线性分类模型的实现
Jul 19 Python
python中append实例用法总结
Jul 30 Python
Python产生一个数值范围内的不重复的随机数的实现方法
Aug 21 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
python入门之算法学习
Apr 22 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中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
JavaScript中string对象
2015/06/12 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
华三通信H3C面试题
2015/05/15 面试题
管理学专业个人求职信范文
2013/12/13 职场文书
社区禁毒工作方案
2014/06/02 职场文书
欠条范文
2015/07/03 职场文书
医院感染管理制度
2015/08/05 职场文书
pytorch中的 .view()函数的用法介绍
2022/03/17 Python