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中的装饰器
Jul 31 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
python实现简单加密解密机制
Mar 19 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
Python如何重新加载模块
Jul 29 Python
python 如何做一个识别率百分百的OCR
May 29 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 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者的疑难问答(2)
2006/10/09 PHP
php escape URL编码
2008/12/10 PHP
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
PHP类中Static方法效率测试代码
2010/10/17 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
javascript html 静态页面传参数
2009/04/10 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
python在非root权限下的安装方法
2018/01/23 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
python实现经典排序算法的示例代码
2021/02/07 Python
彪马日本官网:PUMA日本
2019/01/31 全球购物
党风廉政承诺书
2014/03/27 职场文书
班风学风建设方案
2014/05/06 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
Java实现简单小画板
2022/06/10 Java/Android