谢天谢地,您提供的蒙版有一个 Alpha 通道,您想要屏蔽的区域的内部在 Alpha 通道中定义。因此,在 alpha 通道完整的情况下读取图像,然后使用它来移除该区域中的像素:
假设你的面具存储在mask.png,而你的图像存储在image.png,你可以这样做:
img = cv2.imread('image.png', -1)
mask = cv2.imread('mask.png', -1)
mask = mask[...,3] > 0
mask = np.repeat(mask[..., None], img.shape[2], axis=2)
masked_out = img.copy()
masked_out[mask] = 0
cv2.imshow('Masked Out', masked_out)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('masked_out.png', masked_out)
我们读入原始图像和相应的掩码。然后,我们查看 alpha 通道并对其进行阈值处理,以便任何非零像素创建一个二进制图像,使得非零值是 True 和 False 否则。然后我们创建一个 3D 版本,以便为输入图像中的通道数复制掩码。然后我们将掩码中True 的位置设置为零,以便我们将它们设为黑色像素。我们最终将图像显示到屏幕上,然后在您按任意键后将图像写入屏幕。
如果您对 3D 蒙版不满意,您可以使用广播并将蒙版的逆与输入图像相乘:
img = cv2.imread('image.png', -1)
mask = cv2.imread('mask.png', -1)
mask = mask[...,3] == 0
masked_out = img * (mask[...,None].astype(img.dtype))
cv2.imshow('Masked Out', masked_out)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('masked_out.png', masked_out)