pytorch plt.savefig()的用法及保存路径

目录
  • Pytorch中保存图片的方式
  • plt.savefig
  • 总结

图像有时候比数据更能满足人们的视觉需求

Pytorch中保存图片的方式

pytorch下保存图像有很多种方法,但是这些基本上都是基于图像处理的,将图像的像素指定一定的维度 ,方法如下:

1、tensor直接保存

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import torch
from torchvision import utils as vutils

def save_image_tensor(input_tensor: torch.Tensor, filename):
    """
    将tensor保存为图片
    :param input_tensor: 要保存的tensor
    :param filename: 保存的文件名
    """
    assert (len(input_tensor.shape) == 4 and input_tensor.shape[0] == 1)
    # 复制一份
    input_tensor = input_tensor.clone().detach()
    # 到cpu
    input_tensor = input_tensor.to(torch.device('cpu'))
    # 反归一化
    # input_tensor = unnormalize(input_tensor)
    vutils.save_image(input_tensor, filename)

2、tensor转cv2保存

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import torch
import cv2

def save_image_tensor2cv2(input_tensor: torch.Tensor, filename):
    """
    将tensor保存为cv2格式
    :param input_tensor: 要保存的tensor
    :param filename: 保存的文件名
    """
    assert (len(input_tensor.shape) == 4 and input_tensor.shape[0] == 1)
    # 复制一份
    input_tensor = input_tensor.clone().detach()
    # 到cpu
    input_tensor = input_tensor.to(torch.device('cpu'))
    # 反归一化
    # input_tensor = unnormalize(input_tensor)
    # 去掉批次维度
    input_tensor = input_tensor.squeeze()
    # 从[0,1]转化为[0,255],再从CHW转为HWC,最后转为cv2
    input_tensor = input_tensor.mul_(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).type(torch.uint8).numpy()
    # RGB转BRG
    input_tensor = cv2.cvtColor(input_tensor, cv2.COLOR_RGB2BGR)
    cv2.imwrite(filename, input_tensor)

3、tensor转pillow保存

def save_image_tensor2pillow(input_tensor: torch.Tensor, filename):
    """
    将tensor保存为pillow
    :param input_tensor: 要保存的tensor
    :param filename: 保存的文件名
    """
    assert (len(input_tensor.shape) == 4 and input_tensor.shape[0] == 1)
    # 复制一份
    input_tensor = input_tensor.clone().detach()
    # 到cpu
    input_tensor = input_tensor.to(torch.device('cpu'))
    # 反归一化
    # input_tensor = unnormalize(input_tensor)
    # 去掉批次维度
    input_tensor = input_tensor.squeeze()
    # 从[0,1]转化为[0,255],再从CHW转为HWC,最后转为numpy
    input_tensor = input_tensor.mul_(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).type(torch.uint8).numpy()
    # 转成pillow
    im = Image.fromarray(input_tensor)
    im.save(filename)

主要是写一些函数来保存图片;

另外,pytorch中有很多可以直接保存图片的语句

save_image(fake_images, './img/fake_images-{}.png'.format(epoch + 1))

此语句同样需要转化像素。

那么如果

我只需要打开一个视窗,观察训练过程中图像的变化,我对图像像素保存没有什么需求,只是保存一个视窗,那么我需要的保存图像的函数仅仅是一个

plt.savefig

plt.savefig的用法以及保存的路径,及训练过程中不会被覆盖掉,可以上代码供大家参考

        if epoch % 10== 0:
            plt.title('ber:{:.3f},a: {:.3f},b:{:.3f},snr: {:.3f}'.format(
            error_rate, a, b,M
            ))
            plt.plot(r3)  # 绘制波形

            # save_image(r3, './img/fake_images-{}.png'.format(epoch + 1))
            # print(type(r3))
            # plt.draw()
            plt.draw()
            plt.savefig('./img/pic-{}.png'.format(epoch + 1))
            plt.pause(1)

            plt.close(fig1)

大功告成,可以看看保存后的图片

已经都整整齐齐的在我的保存路径下了。

总结

到此这篇关于pytorch plt.savefig()用法及保存路径的文章就介绍到这了,更多相关plt.savefig()用法及路径内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 解决Python plt.savefig 保存图片时一片空白的问题

    更新 这里我会列出对本文的更新. 2017 年 9 月 28 日:修正几处错字,优化排版. 问题 当使用如下代码保存使用 plt.savefig 保存生成的图片时,结果打开生成的图片却是一片空白. import matplotlib.pyplot as plt """ 一些画图代码 """ plt.show() plt.savefig("filename.png") 原因 其实产生这个现象的原因很简单:在 plt.show()

  • matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域

    最近在作图时需要将输出的图片紧密排布,还要去掉坐标轴,同时设置输出图片大小. 要让程序自动将图表保存到文件中,代码为: plt.savefig('squares_plot.png', bbox_inches='tight') 第一个实参指定要以什么样的文件名保存图表,这个文件将存储到scatter_squares.py所在的目录中. 第二个实参指定将图表多余的空白区域裁减掉.如果要保留图表周围多余的空白区域,可省略这个实参. 但是发现matplotlib使用plt.savefig()保存的图片

  • pytorch plt.savefig()的用法及保存路径

    目录 Pytorch中保存图片的方式 plt.savefig 总结 图像有时候比数据更能满足人们的视觉需求 Pytorch中保存图片的方式 pytorch下保存图像有很多种方法,但是这些基本上都是基于图像处理的,将图像的像素指定一定的维度 ,方法如下: 1.tensor直接保存 #!/usr/bin/env python # _*_ coding:utf-8 _*_ import torch from torchvision import utils as vutils def save_ima

  • Pytorch之contiguous的用法

    contiguous tensor变量调用contiguous()函数会使tensor变量在内存中的存储变得连续. contiguous():view只能用在contiguous的variable上.如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy. 一种可能的解释是: 有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguo

  • Pytorch之Variable的用法

    1.简介 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Variable和tensor的区别和联系 Variable是篮子,而tensor是鸡蛋,鸡蛋应该放在篮子里才能方便拿走(定义variable时一个参数就是tensor) Variable这个篮子里除了装了tensor外还有requires_grad参数,表示是否需要对其求导,默认为False Variable这个篮子呢,自身有一些属性 比如grad,梯度vari

  • PyTorch中permute的用法详解

    permute(dims) 将tensor的维度换位. 参数:参数是一系列的整数,代表原来张量的维度.比如三维就有0,1,2这些dimension. 例: import torch import numpy as np a=np.array([[[1,2,3],[4,5,6]]]) unpermuted=torch.tensor(a) print(unpermuted.size()) # --> torch.Size([1, 2, 3]) permuted=unpermuted.permute(

  • Pytorch 中retain_graph的用法详解

    用法分析 在查看SRGAN源码时有如下损失函数,其中设置了retain_graph=True,其作用是什么? ############################ # (1) Update D network: maximize D(x)-1-D(G(z)) ########################### real_img = Variable(target) if torch.cuda.is_available(): real_img = real_img.cuda() z = V

  • Pytorch maxpool的ceil_mode用法

    pytorch里面的maxpool,有一个属性叫ceil_mode,这个属性在api里面的解释是 ceil_mode: when True, will use ceil instead of floor to compute the output shape 也就是说,在计算输出的shape的时候,如果ceil_mode的值为True,那么则用天花板模式,否则用地板模式. ??? 举两个例子就明白了. # coding:utf-8 import torch import torch.nn as

  • Pytorch mask_select 函数的用法详解

    非常简单的函数,但是官网的介绍令人(令我)迷惑,所以稍加解释. mask_select会将满足mask(掩码.遮罩等等,随便翻译)的指示,将满足条件的点选出来. 根据掩码张量mask中的二元值,取输入张量中的指定项( mask为一个 ByteTensor),将取值返回到一个新的1D张量, 张量 mask须跟input张量有相同数量的元素数目,但形状或维度不需要相同 x = torch.randn(3, 4) x 1.2045 2.4084 0.4001 1.1372 0.5596 1.5677

  • pytorch torchvision.ImageFolder的用法介绍

    torchvision.datasets Datasets 拥有以下API: __getitem__ __len__ Datasets都是 torch.utils.data.Dataset的子类,所以,他们也可以通过torch.utils.data.DataLoader使用多线程(python的多进程). 举例说明: torch.utils.data.DataLoader(coco_cap, batch_size=args.batchSize, shuffle=True, num_workers

  • 基于pytorch中的Sequential用法说明

    class torch.nn.Sequential(* args) 一个时序容器.Modules 会以他们传入的顺序被添加到容器中.当然,也可以传入一个OrderedDict. 为了更容易的理解如何使用Sequential, 下面给出了一个例子: # Example of using Sequential model = nn.Sequential( nn.Conv2d(1,20,5), nn.ReLU(), nn.Conv2d(20,64,5), nn.ReLU() ) # Example o

随机推荐