【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)