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实现简单QQ单用户机器人的方法
Jul 03 Python
python进阶教程之循环对象
Aug 30 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
Python测试人员需要掌握的知识
Feb 08 Python
python psutil库安装教程
Mar 19 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
python集合是否可变总结
Jun 20 Python
安装python及pycharm的教程图解
Oct 10 Python
Django实现分页显示效果
Oct 31 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
python 进阶学习之python装饰器小结
Sep 04 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新手上路(四)
2006/10/09 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
php curl 上传文件代码实例
2015/04/27 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
python list语法学习(带例子)
2013/11/01 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
python读取xlsx的方法
2018/12/25 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
个性大学生自我评价
2013/12/04 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
2014年度个人工作总结
2014/11/07 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
MySQL kill不掉线程的原因
2021/05/07 MySQL
浅谈如何提高PHP代码的质量
2021/05/28 PHP
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle