torchvision.utils.save_image()保存tensor显示图片异常问题解决

有些像素点会显示为全黑(灰度图),如下图所示,第一张和第三张图


刚开始以为是图像数据分布范围的问题,在保存之前输出图像tensor的最大max和最小min值,出现了 -0.0x和1.0x的数值,说明图像的像素范围超出了0-1。

可是通过读utils.save_image()的源码发现,就算超出0-1也不应该出现这种问题,源码中存在如下部分代码

    # Add 0.5 after unnormalizing to [0, 255] to round to nearest integerndarr = grid.mul(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to("cpu", torch.uint8).numpy()

grid可以理解为图片张量,这段代码

  1. 首先将 grid 张量中的每个元素乘以255。这一步将原来在0到1范围内的图像数据转换到0到255的范围内
  2. 对 grid 张量中的每个元素加上0.5。这一步可能是为了进行亮度调整或将值偏移至正数范围内
  3. 将 grid 张量中的每个元素限制在0到255的范围内。小于0的值将被设置为0,大于255的值将被设置为255
  4. 后面的不重要
    源码在将所有像素乘255之后,已经将数据每个像素范围限制在了0-255之间

经过查看其他成功的代码源码中的注释发现。大多在使用 torchvision.utils.save_image时直接将4Dtensor图片和保存路径传入给 save_image()函数就行,不会出现问题。

如源码所示

本文链接:https://my.lmcjl.com/post/4734.html

展开阅读全文

4 评论

留下您的评论.