python多边形重叠,合并重叠区间python
本文主要介绍Python合并重叠矩形框,循环递归,依次判断两个框是否重叠。以下具体实施过程中需要的合作伙伴可以参考一下。
需求:
NMS的IOU关联是选择最大或最可信的帧来保留。现在我们需要把重叠的帧合并成一个大帧,所以不能直接用上面那个。而且我真的不懂Python中OpenCV的groupRectangles,它会直接删除不重叠的方框。原理:
递归,依次判断两个盒子是否重叠。效果:
参考代码:
导入cv2
将numpy作为np导入
定义检查重叠(boxa,boxb):
x1,y1,w1,h1=boxa
x2,y2,w2,h2=boxb
if (x1 x2 w2):
返回0
if (y1 y2 h2):
返回0
if (x1 w1 x2):
返回0
if (y1 h1 y2):
返回0
colInt=abs(min(x1 w1,x2 w2) - max(x1,x2))
rowInt=abs(min(y1 h1,y2 h2) - max(y1,y2))
overlap_area=colInt * rowInt
area1=w1 * h1
area2=w2 * h2
返回overlap _ area/(area 1 area 2-overlap _ area)
def联合箱(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]
定义交叉箱(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
如果w 0或h 0:
return()
return [x,y,w,h]
def rect merge _ sxf(rects :[]):
# rects=[[x1,y1,w1,h1],[x2,y2,w2,h2],]
当通过connectedComponentsWithStats找到rects坐标时,
注意,前两个坐标代表全图,需要去掉,否则就只有一个大方框了。
在执行这个函数之前,您可以做如下的事情。
rect list=sorted(rect list)[2:]
rectList=rects.copy()
rectList.sort()
new_array=[]
完成=1
#使用while,而不是forEach,因为rectList的内容会改变。
i=0
而我len(rectList):
#选后面的就行了,前面的已经判断过了,不需要重复操作。
j=11
succees _ once=0
而j len(rectList):
boxa=rectList[i]
boxb=rectList[j]
#判断是否有重叠。请注意,它仅适用于水平垂直情况,不适用于角度旋转。
如果检查重叠(boxa,boxb): #交叉框(boxa,boxb)
完成=0
#将合并的矩阵添加到候选区域。
new_array.append(unionBox(boxa,boxb))
succees _ once=1
#从原列表中删除,因为这两个已经合并,不删除会造成重复计算。
rectList.remove(boxa)
rectList.remove(boxb)
破裂
j=1
如果成功了:
#成功合并一次,这个时候我不需要1,因为对它进行了remove(boxb)操作。
继续
i=1
#其余项目不重叠,直接添加即可。
new_array.extend(rectList)
# 0:可能存在未合并的递归调用。
# 1:这次没有合并的项目,也就是说都是分开的,可以结束退出了。
如果完成==0:
完成,new _ array=rect merge _ sxf(new _ array)
返回完成,新数组
box=[[20,20,20,20],[100,100,100,100],[60,60,50,50],[50,50,50]
_,res=rectMerge_sxf(box)
打印(分辨率)
打印(方框)
img=np.ones([256,256,3],np.uint8)
适用于:箱中的x、y、w、h
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)
对于res:中的x、y、w、h
img=cv2.rectangle(img,(x,y),(x w,y h),(0,0,255),2)
cv2.imshow(after ,img)
cv2.waitKey(0)
这就是这篇关于Python合并重叠矩形框的文章。关于Python合并矩形框的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。