尽管初始大小固定,但BoundingBox / ROI跟踪对象的大小仍在不断增加

时间:2015-06-21 05:45:16

标签: python c++ opencv kinect simplecv

我正在尝试使用Media Flow Tracker根据区域跟踪我的手,但是一段时间后边界框会不断增加。它在前10秒左右正常工作。

这是一个代码段:

def main():
display = SimpleCV.Display()
cam = Kinect()
ts = []
bb = None
img = cam.getDepth().flipHorizontal()
while display.isNotDone():
    depth = cam.getDepth().flipHorizontal()
    filtered = depth.stretch(0, 180).binarize().dilate(1)

    if bb is None:
        blobs = filtered.findBlobs()
        if blobs:
            hand = blobs.filter(abs(7000 - blobs.area()) < 500)
            print hand
            if hand:
                bb = hand[0].boundingBox()
                print bb
    if bb is not None:
        ts = filtered.track("mftrack", ts, img, bb)
        if ts:
            ts.drawBB()
            ts.showPixelVelocityRT()
            ts.drawPath()
    filtered.show()

1 个答案:

答案 0 :(得分:3)

我会从以下行中删除对dilate的调用:

filtered = depth.stretch(0, 180).binarize().dilate(1)

来自SimpleCV $setOnInsert

  

扩张(迭代= 1)   应用形态学扩张。扩张具有平滑斑点的效果,同时增强了噪声斑点的数量。此实现使用默认的openCV 3X3平方内核Erosion有效地是局部最大值检测器,内核在图像上移动并在内核中获取最大值。

变量filtered用于filtered.findBlobs()的每次循环迭代。这些斑点的强度和密度用于确定边界框的尺寸。

您正在调用stretch函数以及扩展。随着时间的推移,对dilate的调用会导致噪声被检测为手的一部分,因此边界框会相应增加。