使用 matshow 绘制 RGB 图像失败 - 形状无效
Plot RGB image with matshow failed - Invalid shape
我有 12 个波段的阵列:
array
(53, 44, 12)
我想从这个数组创建 RGB 图像。
为了做到这一点,我知道我需要从数组中切出 3,2 和 1 通道并从中创建图像。为了获得这些乐队,我这样做了:
red=array[:,:,3]
green=array[:,:,2]
blue=array[:,:,1]
#stack together:
rgb=np.stack((red,green,blue))
问题是,每当我想将图像显示为 rgb 时,我都会收到错误消息:
fig, ax = plt.subplots(figsize=(20,10))
ax.matshow(rgb)
TypeError: Invalid shape (3, 44, 12) for image data
我解决它的第一个想法是改变轴的顺序,因为我认为它以 3 作为行数,我使用了 np.moveaxis:
rgb=np.moveaxis(rgb, 0, -1).shape
rgb.shape
>>>
(44,12,3)
但是当我再次尝试使用 matshow 时,我又遇到了错误:
TypeError: Invalid shape (3,) for image data
我不确定我的错误在哪里,就像过去使用 matshow 一样工作一样。
我的最终目标是能够将三个波段绘制为 rgb 图像。
如果你有一张像这样有 12 个波段的图像:
image[53,44,12]
如果您想要前三个波段,只需使用:
b0b1b2 = image[..., :3]
检查您拥有的物品:
print(b0b1b2.shape)
(53, 44, 3)
这是 Numpy slicing。
如果您想要频段 0、4 和 5,请使用
b0b4b5 = image[..., [0,4,5]]
您需要沿第 3 轴堆叠:
rgb = np.dstack((red,green,blue))
或
rgb = np.stack((red,green,blue), axis=2)
正如 已经指出的那样,您可以通过标准切片更轻松地完成同样的工作。如果 array
的 12 个波段实际上代表 4 个图像(每个 3 个通道),您还可以将阵列沿轴 2 拆分为 4 个阵列,如下所示:
a1, a2, a3, a4 = np.split(array, 4, 2)
我有 12 个波段的阵列:
array
(53, 44, 12)
我想从这个数组创建 RGB 图像。 为了做到这一点,我知道我需要从数组中切出 3,2 和 1 通道并从中创建图像。为了获得这些乐队,我这样做了:
red=array[:,:,3]
green=array[:,:,2]
blue=array[:,:,1]
#stack together:
rgb=np.stack((red,green,blue))
问题是,每当我想将图像显示为 rgb 时,我都会收到错误消息:
fig, ax = plt.subplots(figsize=(20,10))
ax.matshow(rgb)
TypeError: Invalid shape (3, 44, 12) for image data
我解决它的第一个想法是改变轴的顺序,因为我认为它以 3 作为行数,我使用了 np.moveaxis:
rgb=np.moveaxis(rgb, 0, -1).shape
rgb.shape
>>>
(44,12,3)
但是当我再次尝试使用 matshow 时,我又遇到了错误:
TypeError: Invalid shape (3,) for image data
我不确定我的错误在哪里,就像过去使用 matshow 一样工作一样。
我的最终目标是能够将三个波段绘制为 rgb 图像。
如果你有一张像这样有 12 个波段的图像:
image[53,44,12]
如果您想要前三个波段,只需使用:
b0b1b2 = image[..., :3]
检查您拥有的物品:
print(b0b1b2.shape)
(53, 44, 3)
这是 Numpy slicing。
如果您想要频段 0、4 和 5,请使用
b0b4b5 = image[..., [0,4,5]]
您需要沿第 3 轴堆叠:
rgb = np.dstack((red,green,blue))
或
rgb = np.stack((red,green,blue), axis=2)
正如 array
的 12 个波段实际上代表 4 个图像(每个 3 个通道),您还可以将阵列沿轴 2 拆分为 4 个阵列,如下所示:
a1, a2, a3, a4 = np.split(array, 4, 2)