2015-06-21 8 views
9

Próbuję śledzić moją rękę w oparciu o obszar za pomocą narzędzia Media Flow Tracker, ale po pewnym czasie ramka graniczna rośnie. Działa poprawnie przez pierwsze 10 sekund.Rozmiar obszaru BoundingBox/ROI dla obiektu śledzenia stale wzrasta pomimo ustalonego rozmiaru początkowego

Oto fragment kodu:

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() 

Odpowiedz

3

Chciałbym usunąć wywołanie dilate z następującej linii:

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

Z SimpleCV documentation:

rozszerzają (iterations = 1) Zastosuj morph rozszerzenie ologiczne. Dylatacja skutkuje wygładzeniem obiektów typu blob przy jednoczesnym zwiększaniu ilości bloków szumów. Ta implementacja wykorzystuje domyślne jądro kwadratowe openCV 3X3 Erosion jest efektywnie lokalnym detektorem maxima, jądro przesuwa się nad obrazem i pobiera wartość maksimum wewnątrz jądra.

Zmienna filtered jest używana w każdej iteracji pętli z filtered.findBlobs(). Natężenie i gęstość tych plamek są używane do określenia wymiarów ramki ograniczającej.

Dzwonisz do funkcji stretch wraz z rozszerzeniem. Z biegiem czasu wywołanie funkcji dilate powoduje wykrycie szumu jako części ręki, więc ramka ograniczająca odpowiednio się zwiększa.

+1

Spróbuję i dam ci znać. –

+0

Widzę pewne ulepszenia, ale wciąż ten sam problem. –

+0

czy pudełko w końcu osiąga maksymalny rozmiar lub rośnie w nieskończoność? – ross

Powiązane problemy