【Clipping input data to the .... for integers).】的解决办法

【Clipping input data to the .... for integers).】的解决办法:

          参考资料:https://www.freesion.com/article/7534157435/

          在用matplotlib.pyplot显示输入图像时,一直报警告错误“Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).”,但图像显示结果是正常的。

          检索了一些资料,有博主报错的原因是用float32的图像占位符直接显示了uint8格式的图像,添加了“image = image/255”后停止报错,但我添加后没有效果。

          出现这个错误的根本原因是要显示的图像像素值超出了inshow()函数的有效范围【integers:[0,255];floats:[0,1]】,可以先print出现问题的图像找出问题的根本原因,我的图像打印为:

tensor([[[-0.7804, -0.7804, -0.7882,  ...,  0.2706,  0.2549,  0.3020],
         [-0.7725, -0.7725, -0.7725,  ...,  0.2863,  0.2941,  0.2941],
         [-0.7725, -0.7725, -0.7647,  ...,  0.2235,  0.2706,  0.3098],
         ...,
         [ 0.2627,  0.2000,  0.1922,  ...,  0.2784,  0.2157,  0.2392],
         [ 0.3569,  0.3176,  0.3098,  ...,  0.2706,  0.1922,  0.2706],
         [ 0.3490,  0.3020,  0.3725,  ...,  0.2941,  0.2157,  0.2627]],

        [[-0.7804, -0.7804, -0.7882,  ...,  0.2706,  0.2549,  0.3020],
         [-0.7725, -0.7725, -0.7725,  ...,  0.2863,  0.2941,  0.2941],
         [-0.7725, -0.7725, -0.7647,  ...,  0.2235,  0.2706,  0.3098],
         ...,
         [ 0.2627,  0.2000,  0.1922,  ...,  0.2784,  0.2157,  0.2392],
         [ 0.3569,  0.3176,  0.3098,  ...,  0.2706,  0.1922,  0.2706],
         [ 0.3490,  0.3020,  0.3725,  ...,  0.2941,  0.2157,  0.2627]],

        [[-0.7804, -0.7804, -0.7882,  ...,  0.2706,  0.2549,  0.3020],
         [-0.7725, -0.7725, -0.7725,  ...,  0.2863,  0.2941,  0.2941],
         [-0.7725, -0.7725, -0.7647,  ...,  0.2235,  0.2706,  0.3098],
         ...,
         [ 0.2627,  0.2000,  0.1922,  ...,  0.2784,  0.2157,  0.2392],
         [ 0.3569,  0.3176,  0.3098,  ...,  0.2706,  0.1922,  0.2706],
         [ 0.3490,  0.3020,  0.3725,  ...,  0.2941,  0.2157,  0.2627]]])
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).

tensor([[[ 0.3647,  0.3647,  0.3882,  ...,  0.3255,  0.3176,  0.2941],
         [ 0.3647,  0.3804,  0.4039,  ...,  0.3176,  0.3569,  0.3647],
         [ 0.3490,  0.3412,  0.3725,  ...,  0.2784,  0.3255,  0.3333],
         ...,
         [ 0.2941,  0.3255,  0.2863,  ..., -0.1137, -0.5843, -0.6784],
         [ 0.2784,  0.2784,  0.2941,  ..., -0.1922, -0.6235, -0.6706],
         [ 0.2706,  0.2784,  0.2314,  ..., -0.3412, -0.6392, -0.6784]],

        [[ 0.3647,  0.3647,  0.3882,  ...,  0.3255,  0.3176,  0.2941],
         [ 0.3647,  0.3804,  0.4039,  ...,  0.3176,  0.3569,  0.3647],
         [ 0.3490,  0.3412,  0.3725,  ...,  0.2784,  0.3255,  0.3333],
         ...,
         [ 0.2941,  0.3255,  0.2863,  ..., -0.1137, -0.5843, -0.6784],
         [ 0.2784,  0.2784,  0.2941,  ..., -0.1922, -0.6235, -0.6706],
         [ 0.2706,  0.2784,  0.2314,  ..., -0.3412, -0.6392, -0.6784]],

        [[ 0.3647,  0.3647,  0.3882,  ...,  0.3255,  0.3176,  0.2941],
         [ 0.3647,  0.3804,  0.4039,  ...,  0.3176,  0.3569,  0.3647],
         [ 0.3490,  0.3412,  0.3725,  ...,  0.2784,  0.3255,  0.3333],
         ...,
         [ 0.2941,  0.3255,  0.2863,  ..., -0.1137, -0.5843, -0.6784],
         [ 0.2784,  0.2784,  0.2941,  ..., -0.1922, -0.6235, -0.6706],
         [ 0.2706,  0.2784,  0.2314,  ..., -0.3412, -0.6392, -0.6784]]])
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).

          可见我的程序报出警告的原因是待显示图像的像素值中出现了负值,不符合imshow()函数的要求,添加了“img[img < 0] = 0”一句将小于0的部分置0后停止报错。如果造成警告的是其他问题可以根据输出的图像情况修改,进行归一化/剪裁等对应操作。

img = x[0]
img[img < 0] = 0
img = img.numpy()                   # FloatTensor转为ndarray
img = np.transpose(img, (1, 2, 0))  # 把channel那一维放到最后
plt.imshow(img)

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值