为什么乘以255后图片会变紫?

Why would picture become purple when it's times 255?

首先我将RGB图像缩放到[0,1],然后在matplotlib中显示就可以了。

然后我恢复它(乘以255),并显示它,但是它变成了紫色,如下面的图片所示。

这是什么原因?如何解决?将图像重新缩放到 [0,255] 的正确方法是什么?

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

dog = mpimg.imread('1.jpg')
dog = dog / 255
plt.subplot(121)
plt.imshow(dog) #Normal and ok here
plt.title(('/255'))

dog = dog*255
plt.subplot(122)
plt.imshow(dog) # Purple image, not ok
plt.title('*255')

plt.savefig('out.jpg')
plt.show()

=============================这里一行============= =============

@BruceWayne 建议,我尝试使用 *-255 而不是 *255,并且有效。

但这是什么原因呢?为什么 [-255, 0] 的图片显示正常,而 [0,255] 的图片显示不同?

在这里 dog = mpimg.imread('1.jpg')dog 分配给图像数据,即每个像素的颜色值 reference,然后将每个像素乘以 255,并将结果分配给结果图像的每个像素值。这就是为什么它有那种颜色。(负像)

当我尝试你的程序时,我收到一条警告说 "Clipping input data to the valid range for imshow with RGB data ([0..1] for float or [0..255] for integers)."

当您第一次加载图像时,它由 0..255 范围内的整数组成,imshow 可以正常显示。当您将其除以 255 时,它变成 [0..1] 范围内的浮点数,imshow 再次正常显示。

然后你乘以255,变成[0..255]范围内的浮点数,这个imshow不知道怎么办!

我尝试使用

将其改回整数
import numpy as np
dog = (dog * 255).astype(np.uint8)

(可能有更好的方法)然后它再次正常显示。