2010-07-30 8 views
4

OpenCV fonctionne avec Python et je peux même détecter un visage via ma webcam. Ce que je veux vraiment faire cependant, c'est voir le mouvement et trouver le point au milieu de la goutte de mouvement. L'échantillon camshift est proche de ce que je veux, mais je ne veux pas avoir à sélectionner quelle partie de la vidéo à suivre. Points bonus pour être en mesure de prédire la prochaine image.Comment suivre un blob en utilisant OpenCV et Python

Voici le code que j'ai actuellement:

#!/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() 
+1

juste suit sa piste de boue: D – rownage

+0

Même un l'exemple C de serait utile, car les documents sont très difficiles à suivre . –

+1

Voir aussi simplerized: http://stackoverflow.com/questions/3374828/how-do-i-track-motion-using-opencv-in-python –

Répondre

Questions connexes