【问题标题】:Why would picture become purple when it's times 255?为什么在 255 倍时图片会变成紫色?
【发布时间】:2020-10-01 21:06:32
【问题描述】:

首先我将一个 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] 的图片显示方式不同?

【问题讨论】:

  • 看起来像原版的底片。
  • *-255 是做什么的?
  • @BruceWayne 太棒了!它按 *-255 工作!但我认为 *255 是 /255 的相反程序,而不是 *-255。这对我来说没有意义。为什么有效?

标签: python image matplotlib normalization


【解决方案1】:

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

【讨论】:

  • 谢谢兄弟。但我仍然很困惑。这个图像的原始值是从 0 到 255,然后我将它除以 255(缩放它并获得值从 0 到 1 的 new_image)。我认为将 new_image 乘以 255,然后我可以获得完全相同的原始图像。我的理想有什么问题?
【解决方案2】:

当我尝试您的程序时,我收到一条警告说“使用 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)

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

【讨论】:

  • 谢谢兄弟,关键是我忘记了图像范围从 0 到 255 的值应该是整数。
猜你喜欢
  • 2014-12-14
  • 2017-07-13
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多