You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Mask-RCNN生成的掩码裁剪所有检测到的实例对象

实例分割多目标裁剪调整方法

你使用的实例分割框架返回的r2['masks']是形状为(图像高度, 图像宽度, 实例数量)的三维数组,最后一维对应所有检测到的实例的二值掩码,仅裁剪出单个目标的核心原因是没有遍历最后一维的所有实例,仅读取了索引为0的第一个掩码。

完整修改代码示例

import numpy as np
import cv2

# 原有检测逻辑保持不变
image2 = mpimg.imread(path_to_new_image)
results = model.detect([image2], verbose=1)
r2 = results[0]

# 新增遍历所有实例的裁剪逻辑
masks = r2['masks']
rois = r2['rois'] # 每个实例对应边界框,格式为[y1, x1, y2, x2]
instance_count = masks.shape[-1] # 读取检测到的实例总数

all_cropped = []
for i in range(instance_count):
    # 取出当前实例的掩码和边界框
    single_mask = masks[:, :, i].astype(np.uint8)
    y1, x1, y2, x2 = rois[i]
    # 掩码抠图:仅保留实例区域,其他区域置为黑色
    masked_img = cv2.bitwise_and(image2, image2, mask=single_mask)
    # 按边界框裁剪,去除冗余背景
    cropped_instance = masked_img[y1:y2, x1:x2]
    all_cropped.append(cropped_instance)
    # 若需保存到本地,可添加以下代码
    # cv2.imwrite(f"实例_{i+1}.png", cropped_instance[...,::-1])

常见异常排查

  • 若运行后依然只输出单个实例,先打印instance_count确认数值,如果数值为1,说明检测环节仅识别到一个实例,可下调检测置信度阈值,修改配置中DETECTION_MIN_CONFIDENCE参数(默认值为0.7)到0.5或更低即可。
  • 处理掩码时不要直接对三维masks数组做运算,否则会默认取第一个通道的掩码,仅输出第一个实例的裁剪结果。

内容的提问来源于stack exchange,提问作者user17260797

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:15:03