首页 > 解决方案 > 为什么在 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] 的图片会以不同的方式显示?

标签: pythonimagematplotlibnormalization

解决方案


当我尝试您的程序时,我收到一条警告,提示“使用 RGB 数据将输入数据剪切到 imshow 的有效范围(浮点数为 [0..1] 或整数为 [0..255])。”

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

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

我尝试使用将其改回整数

import numpy as np
dog = (dog * 255).astype(np.uint8)

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


推荐阅读