¿Cómo puedo rastrear un blob usando OpenCV y Python?

He conseguido que OpenCV trabaje con Python e incluso puedo detectar una cara a través de mi cámara web. Sin embargo, lo que realmente quiero hacer es ver movimiento y encontrar el punto en medio de la mancha de movimiento. La muestra de camshift está cerca de lo que quiero, pero no quiero tener que seleccionar qué parte del video se va a rastrear. Puntos de bonificación por poder predecir el siguiente cuadro.

Aquí está el código que tengo actualmente:

#!/usr/bin/env python import cv def is_rect_nonzero(r): (_,_,w,h) = r return (w > 0) and (h > 0) class CamShiftDemo: def __init__(self): self.capture = cv.CaptureFromCAM(0) cv.NamedWindow( "CamShiftDemo", 1 ) self.storage = cv.CreateMemStorage(0) self.cascade = cv.Load("/usr/local/share/opencv/haarcascades/haarcascade_mcs_upperbody.xml") self.last_rect = ((0, 0), (0, 0)) def run(self): hist = cv.CreateHist([180], cv.CV_HIST_ARRAY, [(0,180)], 1 ) backproject_mode = False i = 0 while True: i = (i + 1) % 12 frame = cv.QueryFrame( self.capture ) if i == 0: found = cv.HaarDetectObjects(frame, self.cascade, self.storage, 1.2, 2, 0, (20, 20)) for p in found: # print p self.last_rect = (p[0][0], p[0][1]), (p[0][2], p[0][3]) print self.last_rect cv.Rectangle( frame, self.last_rect[0], self.last_rect[1], cv.CV_RGB(255,0,0), 3, cv.CV_AA, 0 ) cv.ShowImage( "CamShiftDemo", frame ) c = cv.WaitKey(7) % 0x100 if c == 27: break if __name__=="__main__": demo = CamShiftDemo() demo.run() 

Encontré una solución en ¿Cómo puedo rastrear el movimiento usando OpenCV en Python?