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
相关产品推荐
相关产品推荐

