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装饰器decorator介绍
Nov 21 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
pandas Dataframe行列读取的实例
Jun 08 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
利用python制作拼图小游戏的全过程
Dec 04 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 Python
python实现A*寻路算法
Jun 13 Python
PyTorch中permute的使用方法
Apr 26 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
基于文本的留言簿
2006/10/09 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
通过javascript设置css属性的代码
2009/12/28 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
python 字典中取值的两种方法小结
2018/08/02 Python
Python中logging.NullHandler 的使用教程
2018/11/29 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
工作个人的自我评价
2014/01/14 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
无私奉献演讲稿
2014/09/04 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
2014年民政工作总结
2014/11/26 职场文书
工程部部长岗位职责
2015/02/12 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS