python — размер BoundingBox / ROI для отслеживания объекта продолжает увеличиваться, несмотря на фиксированный начальный размер

Я пытаюсь отследить свою руку на основе области, используя 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()

9

Решение

Я бы убрал звонок dilate из следующей строки:

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

От SimpleCV документация:

(итерации расширяют = 1)
Примените морфологическое расширение. Расширение имеет эффект сглаживания капель при одновременном усилении количества шумовых капель. В этой реализации используется стандартное квадратное ядро ​​openCV 3X3. Erosion — эффективный детектор локальных максимумов, ядро ​​перемещается по изображению и принимает значение максимумов внутри ядра.

Переменная filtered используется каждая итерация цикла с filtered.findBlobs(), Интенсивность и плотность этих пятен используются для определения размеров ограничительной рамки.

Вы звоните stretch функция наряду с расширением. Со временем звонок dilate приводит к тому, что шум обнаруживается как часть руки, поэтому ограничивающая рамка соответственно увеличивается.

3

Другие решения


По вопросам рекламы [email protected]