我有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 hstackTypeError: _vhstack_dispatcher() takes 1 positional argument but 2 were given你有什么想法?
2 回答
慕娘9325324
TA贡献1783条经验 获得超5个赞
用于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)
心有法竹
TA贡献1866条经验 获得超5个赞
您的尝试没有成功,因为您没有正确使用可用的工具。您尝试的两种方法都经过了一些小的修改。
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)
添加回答
举报
0/150
提交
取消
