我有幾個重疊的包圍單個對象的邊界框,但它們在一些地方重疊最小。整體而言,它們包含整個對象,但openCV的groupRectangles函數不返回包含該對象的框。邊界框我都顯示爲藍色,和邊框我想返回顯示爲紅色,這裏找到多個重疊矩形的聯合 - OpenCV蟒蛇
我想只得到重疊矩形的聯合,但我不確定如何迭代遍歷列表,而不用組合每個矩形。 我有如下所示的聯合函數和相交函數,以及由(x y w h)表示的矩形列表,其中x和y是框左上角的座標。
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)
我對合並功能目前如下:
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")
這得到大多數的方式存在,因爲這裏
顯示仍有一些嵌套邊界我不確定如何繼續迭代。
http://www.pyimagesearch.com/2014/11/17/non-maximum-suppression-object-detection-python – zindarod
是'boxes'只是numpy的陣列? 'print(type(boxes))' – salparadise
@Zindarod,我之前嘗試過使用它,但不幸的是它給出了一個類似於groupRectangles的結果,因爲它返回一個小的「平均」邊界框,它不覆蓋我的整個對象 – mechaddict