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

如何基于边界框空间邻近性匹配合并两个字典列表的对应元素

解决方法

核心修改点

  • 配对逻辑替换为双层循环,遍历poo和foo所有可能的元素组合,不再受索引位置限制
  • 重写边界框邻近判断逻辑,满足x、y方向间隔不超过10的要求
  • 修正键名匹配错误,补充边界框并集计算逻辑

完整实现代码

def is_box_near(poo_box, foo_box, threshold=10):
    """
    判断两个边界框是否足够邻近
    poo_box: poo中元素的边界框字典,包含xmin/ymin/xmax/ymax字段
    foo_box: foo中元素的box_points列表,格式为[xmin, ymin, xmax, ymax]
    threshold: 单方向最大允许间隔,默认10
    """
    # 计算x方向间隔:重叠时为负,不重叠时为正
    x_gap = max(poo_box['xmin'], foo_box[0]) - min(poo_box['xmax'], foo_box[2])
    # 计算y方向间隔
    y_gap = max(poo_box['ymin'], foo_box[1]) - min(poo_box['ymax'], foo_box[3])
    return x_gap <= threshold and y_gap <= threshold

# 示例数据
poo = [{
      "xmin":10,
      "ymin":100,
      "xmax":70,
      "ymax":120,
      "text":"fish",
}]
foo = [{
      "class":"Animal",
      "percent":88.25,
      "box_points":[30, 90, 80, 110]
}]

poofoo = []
# 双层循环遍历所有配对
for p_item in poo:
    for f_item in foo:
        if is_box_near(p_item, f_item['box_points']):
            # 合并生成新元素
            merged_item = {
                "class": f_item['class'],
                "text": p_item['text'],
                "percent": f_item['percent'],
                "box_points": {
                    "xmin": min(p_item['xmin'], f_item['box_points'][0]),
                    "ymin": min(p_item['ymin'], f_item['box_points'][1]),
                    "xmax": max(p_item['xmax'], f_item['box_points'][2]),
                    "ymax": max(p_item['ymax'], f_item['box_points'][3])
                }
            }
            poofoo.append(merged_item)

运行输出

和预期结果完全一致:

[{
    "class":"Animal",
    "text":"fish",
    "percent": 88.25,
    "box_points":{
          "xmin":10,
          "ymin":90,
          "xmax":80,
          "ymax":120}
}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:15:03