Python如何合并重叠矩形框
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下Python如何合并重叠矩形框,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!需求:NMS中的IOU相关,是选择一个最大或者可信度最高的框框保留。而我们现在试需要将重
千家信息网最后更新 2026年11月03日Python如何合并重叠矩形框
小编给大家分享一下Python如何合并重叠矩形框,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
需求:
NMS中的IOU相关,是选择一个最大或者可信度最高的框框保留。
而我们现在试需要将重叠框框合并为一个大的框框,所以不能直接用上面的。
并且
OpenCV的groupRectangles在Python中我实在用不懂,而且它会把不重叠的框直接删了。。
原理:
循环+递归,依次判断两个框是否有重叠。
效果:

参考代码:
import cv2import numpy as npdef checkOverlap(boxa, boxb): x1, y1, w1, h2 = boxa x2, y2, w2, h3 = boxb if (x1 > x2 + w2): return 0 if (y1 > y2 + h3): return 0 if (x1 + w1 < x2): return 0 if (y1 + h2 < y2): return 0 colInt = abs(min(x1 + w1, x2 + w2) - max(x1, x2)) rowInt = abs(min(y1 + h2, y2 + h3) - max(y1, y2)) overlap_area = colInt * rowInt area1 = w1 * h2 area2 = w2 * h3 return overlap_area / (area1 + area2 - overlap_area)def unionBox(a, b): x = min(a[0], b[0]) y = min(a[1], b[1]) w = max(a[0] + a[2], b[0] + b[2]) - x h = max(a[1] + a[3], b[1] + b[3]) - y return [x, y, w, h]def intersectionBox(a, b): x = max(a[0], b[0]) y = max(a[1], b[1]) w = min(a[0] + a[2], b[0] + b[2]) - x h = min(a[1] + a[3], b[1] + b[3]) - y if w < 0 or h < 0: return () return [x, y, w, h]def rectMerge_sxf(rects: []): # rects => [[x1, y1, w1, h2], [x2, y2, w2, h3], ...] ''' 当通过connectedComponentsWithStats找到rects坐标时, 注意前2個坐标是表示整個圖的,需要去除,不然就只有一個大框, 在执行此函数前,可执行类似下面的操作。 rectList = sorted(rectList)[2:] ''' rectList = rects.copy() rectList.sort() new_array = [] complete = 1 # 要用while,不能forEach,因爲rectList內容會變 i = 0 while i < len(rectList): # 選後面的即可,前面的已經判斷過了,不需要重復操作 j = i + 1 succees_once = 0 while j < len(rectList): boxa = rectList[i] boxb = rectList[j] # 判斷是否有重疊,注意只針對水平+垂直情況,有角度旋轉的不行 if checkOverlap(boxa, boxb): # intersectionBox(boxa, boxb) complete = 0 # 將合並後的矩陣加入候選區 new_array.append(unionBox(boxa, boxb)) succees_once = 1 # 從原列表中刪除,因爲這兩個已經合並了,不刪除會導致重復計算 rectList.remove(boxa) rectList.remove(boxb) break j += 1 if succees_once: # 成功合並了一次,此時i不需要+1,因爲上面進行了remove(boxb)操作 continue i += 1 # 剩餘項是不重疊的,直接加進來即可 new_array.extend(rectList) # 0: 可能還有未合並的,遞歸調用; # 1: 本次沒有合並項,說明全部是分開的,可以結束退出 if complete == 0: complete, new_array = rectMerge_sxf(new_array) return complete, new_arraybox = [[20, 20, 20, 20], [100, 100, 100, 100], [60, 60, 50, 50], [50, 50, 50, 50]]_, res = rectMerge_sxf(box)print(res)print(box)img = np.ones([256, 256, 3], np.uint8)for x,y,w,h in box: img = cv2.rectangle(img, (x,y), (x+w,y+h), (0, 255, 0), 2)cv2.imshow('origin', img)img = np.ones([256, 256, 3], np.uint8)for x,y,w,h in res: img = cv2.rectangle(img, (x,y), (x+w,y+h), (0, 0, 255), 2)cv2.imshow('after', img)cv2.waitKey(0)看完了这篇文章,相信你对"Python如何合并重叠矩形框"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
框框
面的
矩形
坐标
篇文章
不行
最大
最高
成功
两个
代码
函数
原理
只有
可信
可信度
完了
效果
更多
水平
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
鸠鸠互联网科技
互联网核心科技是什么
科技互联网技术
互联网科技小贷
世界互联网领先科技成果
丰台科技园 互联网
掌上梦互联网科技
互联网科技大会案例
创业天下互联网科技有限公司
福州新华互联网科技学校 知乎
贵州叶脉互联网科技有限公司所属行业
崇明区互联网教育科技诚信经营
合肥互联网科技公司公章图片
黑科技 体验场景 互联网大会
小米互联网科技园入驻
下一代互联网重大应用科技园
互联网科技手抄报图片
福仕德教育科技互联网
第三届互联网大会安防黑科技
北京瑞云互联网科技有限公司
小米移动互联网科技园
喔噻互联网科技有限公司
美国互联网科技
佰商互联网科技有限公司
佩信高科技互联网
洛阳昕诺飞互联网科技有限公司
晋城互联网科技
扫呗互联网科技有限公司
数字互联网科技有限公司
互联网 科技节活动 微视频大赛