问题描述
是否有更好的方法将二进制掩码应用于numpy中的颜色通道?我最终不得不一直这样做,感觉应该有。
for c in range(3):
a_image[mask,c] = b_image[mask,c]
(x,y,c)
和a_image
的形状为b_image
,(x,y)
的形状为mask
。
解决方法
您可以简单地在3-D阵列上使用2-D遮罩而无需循环。 Numpy会为您广播到第三维。
a_image[mask] = b_image[mask]
简单的例子:
a_image = np.arange(6).reshape(1,2,3)
#[[[0 1 2]
# [3 4 5]]]
b_image = np.ones((1,3))
#[[[1. 1. 1.]
# [1. 1. 1.]]]
mask = np.array([[False,True]])
#[[False True]]
输出:
[[[0 1 2]
[1 1 1]]]