将灰度图像扩展以适应RGB图像

4

我需要扩展一个图像数组,当前只包含灰度值,形状为:(640,480),要将其扩展为 (640,480,3)。最终,我需要将rgb的numpy数组和灰度的numpy数组进行连接(concatenate)greyscalearray[..., np.newaxis] 的结果是 (640,480,1),是否有办法在最后一个轴上添加 np.zeros(3,1)


你想将灰度数组转换为看起来像灰色的彩色数组,并将其与彩色图像连接在一起,还是你要求一个红色数组,就像答案所给出的那样?如果是这样,为什么要提到连接呢? - Mad Physicist
1个回答

4
我想你需要的是:
RGB = np.dstack((grey, np.zeros_like(grey), np.zeros_like(grey)))

使用np.zeros_like()的好处是,您可以获得一个与您的单通道灰度图像的维度dtype匹配的数组,而无需指定任何一个!
因此,以下是完整代码:
import numpy as np
grey = np.ones((64,48),dtype=np.uint8) 

print(grey.shape)      # prints (64, 48)

# Make 3-channel from singe-channel
RGB = np.dstack((grey, np.zeros_like(grey), np.zeros_like(grey))) 

print(RGB.shape)       # prints (64, 48, 3)
print(RGB[0,0])        # prints [1,0,0]

np.dstack()函数将数组沿深度(即z轴)方向堆叠起来。它的“伙伴”包括np.vstack()函数,它可以将多个图像垂直堆叠在一起,即一个图像在另一个图像下面;还有np.hstack()函数,它可以将多个图像水平堆叠在一起,即一个图像在另一个图像旁边。


非常感谢您详细的回答。是的,我使用了vstack将图像组合在一起,它非常有效。我之前不知道dstack,但它确实很有意义。 - baconStrips
1
如果您想将其中一个通道设为255而不是0,您也可以使用np.zeros_like(grey) + 255。很高兴它能对您有帮助 - 祝您的项目好运。 - Mark Setchell
@MadPhysicist 哈哈,有幽默感的人!我在SO上找你已经6年了! - Mark Setchell
1
抱歉,我不确定这个笑话是什么。我猜楼主想要一个红色的数组。你的搜索继续。 - Mad Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接