python多边形重叠,合并重叠区间python

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: