【问题标题】:Numpy array is showing strange color values when using pyplot.imshow()使用 pyplot.imshow() 时,Numpy 数组显示奇怪的颜色值
【发布时间】:2017-07-31 20:08:46
【问题描述】:

我正在尝试使用 pyplot.imshow 显示一个简单的 RGB 数组。 然而,它的行为出乎意料,例如,像素值 (1,1,1) 显示为完全白色,(0,0,0) 显示为完全黑色,并且接近 (255,255,255) 的值也显示为黑色。这里发生了什么。输入矩阵是否以某种方式按像素缩放?

【问题讨论】:

  • @ThomasKühn wrt #1 我认为 imshow 可以很好地处理彩色图像,只需确保您处理的是包含颜色数据的数组。 stackoverflow.com/a/12117605/7486933 - 此评论看起来很疯狂,因为它引用的评论已被删除。因为问题是关于 RGB 数组,所以我会留下它,这是在 imshow 中加载它们的一个示例。
  • 可能是这个的副本:stackoverflow.com/questions/45259493/…

标签: numpy matplotlib


【解决方案1】:

听起来您的数组具有浮点数据类型。 将其更改为无符号 8 位整数 (uint8):

arr = arr.astype('uint8')

import numpy as np
import matplotlib.pyplot as plt

float_arr = np.array([[(1,1,1),(0,0,0)], [(0,0,0),(255,255,255)]], dtype='float32')
int_arr = np.array([[(1,1,1),(0,0,0)], [(0,0,0),(255,255,255)]], dtype='uint8')

fig, ax = plt.subplots(ncols=2)
ax[0].imshow(float_arr)
ax[0].set_title('float32')
ax[1].imshow(int_arr)
ax[1].set_title('uint8')
plt.legend()
plt.show()

左侧的图像复制了您所看到的行为。如果你的数组有uint8 dtype,右边的图像就是你得到的。


每个the docsimshow 可以接受浮点或uint8 dtype 的MxNx3 RGB 数组。

但是,如果数组具有浮点 dtype,则值应介于 0.0 和 1.0 之间。

如果数组具有 uint8 dtype,则值应介于 0 和 255 之间。

【讨论】:

  • 是的,这就是正在发生的事情,但让我感到困惑的是,期望值在 范围内的值既不是裁剪 0-255 值,也不是缩小它们以适应范围。
猜你喜欢
  • 2018-03-09
  • 1970-01-01
  • 2017-04-10
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多