为什么乘以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)
(可能有更好的方法)然后它再次正常显示。
首先我将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)
(可能有更好的方法)然后它再次正常显示。