Я пытаюсь отследить свою руку на основе области, используя 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()
Я бы убрал звонок dilate
из следующей строки:
filtered = depth.stretch(0, 180).binarize().dilate(1)
От SimpleCV документация:
(итерации расширяют = 1)
Примените морфологическое расширение. Расширение имеет эффект сглаживания капель при одновременном усилении количества шумовых капель. В этой реализации используется стандартное квадратное ядро openCV 3X3. Erosion — эффективный детектор локальных максимумов, ядро перемещается по изображению и принимает значение максимумов внутри ядра.
Переменная filtered
используется каждая итерация цикла с filtered.findBlobs()
, Интенсивность и плотность этих пятен используются для определения размеров ограничительной рамки.
Вы звоните stretch
функция наряду с расширением. Со временем звонок dilate
приводит к тому, что шум обнаруживается как часть руки, поэтому ограничивающая рамка соответственно увеличивается.