【问题标题】:Merging ndarray image合并ndarray图像
【发布时间】:2019-09-25 10:14:45
【问题描述】:

我有一个图像为ndarray,形状为(2000, 2000, 3)。在下一步中,拆分通道以对其进行一些工作:

image_r = (image_color[:,:,0])
image_g = (image_color[:,:,1])
image_b = (image_color[:,:,2])

工作完成后,我需要将通道合并为一张图像。我该怎么做?

我试图生成一个空图像full_image = np.zeros((image.shape[0], image.shape[1]), 3) 并将通道附加到它。但这没有成功。

我还尝试使用 hstack 堆叠值。

full_image = np.zeros((image.shape[0], image.shape[1]))
full_image = np.hstack(full_image, image_r)
full_image = np.hstack(full_image, image_g)
full_image = np.hstack(full_image, image_b)

但这也没有成功。出现以下错误:

full_image = np.hstack(full_image, image_r)
  File "<__array_function__ internals>", line 4, in hstack
TypeError: _vhstack_dispatcher() takes 1 positional argument but 2 were given

你有什么想法吗?

【问题讨论】:

  • 考虑在第一次尝试时也显示错误

标签: python image numpy


【解决方案1】:

使用dstack 沿第三轴堆叠数组:

full_image = np.dstack([image_r, image_g, image_b])

image_color = np.random.randint(0,255,(2000, 2000, 3))

image_r = (image_color[:,:,0])
image_g = (image_color[:,:,1])
image_b = (image_color[:,:,2])

np.dstack([image_r, image_g, image_b]).shape
# (2000, 2000, 3)

【讨论】:

  • dstack 是否保持订单?
  • 是的,当然,它会根据其输入@JürgenK 的顺序堆叠。
【解决方案2】:

您的尝试没有成功,因为您没有正确使用可用的工具。您尝试的两种方法都经过了一些小的修改。

zeros 需要一个元组来描述数组大小,而不是两个单独的参数:

 full_image = np.zeros((image.shape[0], image.shape[1], 3))
 full_image[..., 0] = image_r
 full_image[..., 1] = image_g
 full_image[..., 2] = image_b

hstack 沿第二个维度连接。你想连接第三个,所以要么使用dstack,要么只使用stack。在任何一种情况下,第一个参数都是一个元组,其中包含 所有 要连接的数组:

full_image = np.dstack((image_r, image_g, image_b))

full_image = np.stack((image_r, image_g, image_b), axis=2)

你甚至可以使用concatenate,但我真的不推荐它。 concatenate 接受你想要加入的所有数组的元组,比如stack,但它在一个已经存在的维度上运行,所以你必须创建一个:

full_image = np.concatenate((image_r[..., None], image_g[..., None], image_b[..., None]), axis=2)

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 2019-07-03
    • 2015-03-26
    • 2018-12-24
    • 2015-09-13
    • 2011-07-28
    • 2011-08-21
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多