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

Detectron2单类模型预测后,如何将检测框外区域设为白色?

保留Detectron2检测框内内容,其余区域设为白色

以下是实现需求的完整代码,核心思路是先生成全白背景,再将所有检测框内的原图内容复制到对应位置,自动处理重叠框的情况:

from detectron2 import model_zoo
from detectron2.config import get_cfg
from detectron2.engine import DefaultPredictor
import cv2
import numpy as np

# 配置模型(替换为你的实际配置和权重路径)
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file('COCO-Detection/你的配置文件.yaml'))
cfg.MODEL.WEIGHTS = '你的模型权重路径.pth'
# 按需设置置信度阈值,过滤低置信度检测框
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5

predictor = DefaultPredictor(cfg)

# 读取图像(替换为你的图像路径)
img = cv2.imread('你的图像路径.jpg')
# 保存原图的尺寸信息
h, w = img.shape[:2]

# 执行预测
out = predictor(img)

# 生成全白背景图像
white_bg = np.ones_like(img) * 255

# 提取检测框:out['instances']是预测结果,pred_boxes存储所有检测框
# 先过滤掉低置信度的结果(如果设置了阈值的话)
instances = out['instances'][out['instances'].scores >= cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST]
boxes = instances.pred_boxes.tensor.numpy()

# 遍历每个检测框,复制框内内容到白背景
for box in boxes:
    # 将浮点型坐标转为整数(OpenCV需要整数坐标)
    x1, y1, x2, y2 = map(int, box)
    # 确保坐标不超出图像边界
    x1 = max(0, x1)
    y1 = max(0, y1)
    x2 = min(w, x2)
    y2 = min(h, y2)
    # 复制原图框内区域到白背景对应位置
    white_bg[y1:y2, x1:x2] = img[y1:y2, x1:x2]

# 保存或显示处理后的图像
cv2.imwrite('处理后的图像.jpg', white_bg)
# cv2.imshow('Result', white_bg)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

关键说明:

  • 替换代码中的配置文件路径、模型权重路径和图像路径为你自己的实际路径
  • cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST 可按需调整,过滤置信度低的检测框,避免无效框干扰
  • 坐标转换时添加了边界检查,防止超出图像范围引发错误
  • 重叠框会自动覆盖处理,后处理的框内容会保留,不影响最终效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:52:36