J'ai plusieurs zones de délimitation superposées qui englobent un seul objet, mais elles se chevauchent de façon minimale à certains endroits. Pris dans leur ensemble, ils englobent l'objet entier, mais la fonction groupRectangles d'openCV ne renvoie pas de boîte englobant l'objet. Les boîtes englobantes I ont sont en bleu, et des boîtes englobantes je voudrais revenir sont en rouge iciRecherche de l'union de plusieurs rectangles superposés - OpenCV python
Je voudrais obtenir l'union des seuls les rectangles qui se chevauchent, mais je suis incertain sur la façon de parcourez la liste sans combiner chaque rectangle. J'ai les fonctions d'union et d'intersection illustrées ci-dessous, et une liste des rectangles représentés par (x y w h), où x et y sont les coordonnées du coin supérieur gauche de la boîte.
def union(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 intersection(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() # or (0,0,0,0) ?
return (x, y, w, h)
Ma fonction pour combiner est actuellement comme suit:
def combine_boxes(boxes):
noIntersect = False
while noIntersect == False and len(boxes) > 1:
a = boxes[0]
print a
listBoxes = boxes[1:]
print listBoxes
index = 0
for b in listBoxes:
if intersection(a, b):
newBox = union(a,b)
listBoxes[index] = newBox
boxes = listBoxes
noIntersect = False
index = index + 1
break
noIntersect = True
index = index + 1
print boxes
return boxes.astype("int")
Cela devient la plupart du chemin, comme indiqué ici
il y a encore quelques englobante imbriquées boîtes que je ne suis pas sûr de savoir comment continuer itération à travers.
http://www.pyimagesearch.com/2014/11/17/non-maximum-suppression-object-detection-python – zindarod
est 'boxes' juste un tableau numpy? 'print (type (boîtes))' – salparadise
@Zindarod, j'essayais de l'utiliser précédemment, mais malheureusement, il donne un résultat similaire à groupRectangles, en ce sens qu'il retourne une petite boîte englobante 'moyenne' qui ne couvre pas tout mon objet – mechaddict