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中的__builtins__内建对象
Jun 21 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
Python urllib3软件包的使用说明
Nov 18 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 Python
matlab xlabel位置的设置方式
May 21 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 substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
告诉大家什么是JSON
2008/06/10 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
Python实现一个简单的MySQL类
2015/01/07 Python
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
详解python算法常用技巧与内置库
2020/10/17 Python
德国购买健身器材:AsVIVA
2017/08/09 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
求职简历的自我评价怎样写好
2013/10/07 职场文书
电子银行营销方案
2014/02/22 职场文书
供货协议书范本
2014/04/22 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
2014年后勤工作总结
2014/11/18 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
关于军训的感想
2015/08/07 职场文书
高中体育课教学反思
2016/02/16 职场文书