所描述的其他方法采用二进制掩码。如果要使用实值单通道灰度图像作为遮罩(例如,从Alpha通道),可以将其扩展为三个通道,然后将其用于插值:
assert len(mask.shape) == 2 and issubclass(mask.dtype.type, np.floating)
assert len(foreground_rgb.shape) == 3
assert len(background_rgb.shape) == 3
alpha3 = np.stack([mask]*3, axis=2)
blended = alpha3 * foreground_rgb + (1. - alpha3) * background_rgb
请注意, mask
必须在0..1
范围内,操作才能成功。还假设1.0
编码仅保留前景,而0.0
意味着仅保留背景。
如果蒙版的形状可能为(h, w, 1)
,这将有助于:
alpha3 = np.squeeze(np.stack([np.atleast_3d(mask)]*3, axis=2))
在这里, np.atleast_3d(mask)
使遮罩(h, w, 1)
为(h, w)
并且np.squeeze(...)
将结果从(h, w, 3, 1)
(h, w)
np.squeeze(...)
为(h, w, 3)
。
0
如何在最新的python绑定(cv2)中将蒙版应用于彩色图像?在以前的python绑定中,最简单的方法是使用
cv.Copy
例如cv.Copy(dst, src, mask)
但是此功能在cv2绑定中不可用。有没有不使用样板代码的解决方法?