如何用Python叠加Mask RCNN生成的多幅图像目标掩码?
掩码叠加实现方法
二值掩码合并(多实例掩码合并为一个)
如果你的掩码是二值形式(仅区分目标区域和背景,值为0或1),可以用以下两种方法快速合并:
方法1:NumPy逻辑或运算
通过对多个掩码执行逻辑或操作,保留所有目标区域:
import numpy as np # 示例:3个形状为(H, W)的二值掩码 mask1 = np.random.randint(0, 2, (512, 512)) mask2 = np.random.randint(0, 2, (512, 512)) mask3 = np.random.randint(0, 2, (512, 512)) # 合并所有掩码 combined_mask = np.logical_or.reduce([mask1, mask2, mask3]).astype(np.uint8)
方法2:求和转二值
将多个掩码求和后,把大于0的区域设为1,同样能得到合并后的掩码:
import numpy as np # 示例掩码 mask1 = np.random.randint(0, 2, (512, 512)) mask2 = np.random.randint(0, 2, (512, 512)) combined_mask = (mask1 + mask2) > 0 combined_mask = combined_mask.astype(np.uint8)
如果是Mask RCNN输出的masks张量(形状为[实例数, 高度, 宽度]),可以直接用np.any(masks, axis=0)快速合并所有实例的掩码。
多类别彩色掩码叠加
如果需要区分不同目标/类别的掩码,可以给每个掩码分配不同颜色,生成彩色叠加掩码:
import numpy as np import cv2 # 示例:3个不同类别的二值掩码 class1_mask = np.random.randint(0, 2, (512, 512)) class2_mask = np.random.randint(0, 2, (512, 512)) class3_mask = np.random.randint(0, 2, (512, 512)) # 创建空白彩色画布 color_overlay = np.zeros((512, 512, 3), dtype=np.uint8) # 给每个类别掩码分配专属颜色 color_overlay[class1_mask == 1] = [255, 0, 0] # 红色 color_overlay[class2_mask == 1] = [0, 255, 0] # 绿色 color_overlay[class3_mask == 1] = [0, 0, 255] # 蓝色 # 若需叠加到原图(可选) # original_img = cv2.imread("你的原图路径.jpg") # final_img = cv2.addWeighted(original_img, 0.7, color_overlay, 0.3, 0)
内容的提问来源于stack exchange,提问作者lucas diniz
相关产品推荐
相关产品推荐

