Skip to content


Folders and files

Last commit message
Last commit date

Latest commit



49 Commits

Repository files navigation


CMT (Consensus-based Matching and Tracking of Keypoints for Object Tracking) is a novel keypoint-based method for long-term model-free object tracking in a combined matching-and-tracking framework. Details can be found on the project page and in our publication. The Python implementation in this repository is platform-independent and runs on Linux, Windows and OS X.


CMT is freely available under the 3-clause BSD license, meaning that you can basically do with the code whatever you want. If you use our algorithm in scientific work, please cite our publication

    author = {Nebehay, Georg and Pflugfelder, Roman},
    booktitle = {Computer Vision and Pattern Recognition},
    month = jun,
    publisher = {IEEE},
    title = {Clustering of {Static-Adaptive} Correspondences for Deformable Object Tracking},
    year = {2015}


  • Python
  • OpenCV-Python (>= 2.4, < 3)
  • NumPy
  • SciPy
  • optional: ipdb (for debugging the code)

Note for Windows users: if you are unable to read video files, please follow this suggestion:


usage: [-h] [--challenge] [--preview] [--no-preview] [--no-scale]
               [--no-rotation] [--bbox BBOX] [--pause] [--output-dir OUTPUT]

Optional arguments

  • inputpath The input path.
  • -h, --help show help message and exit
  • --challenge Enter challenge mode.
  • --preview Force preview
  • --no-preview Disable preview
  • --no-scale Disable scale estimation
  • --with-rotation Enable rotation estimation
  • --bbox BBOX Specify initial bounding box. Format: x,y,w,h
  • --pause Pause after each frame
  • --skip N Skips N frames of the video input
  • --output-dir OUTPUT Specify a directory for output data.
  • --quiet Do not show graphical output (Useful in combination with --output-dir).

Object Selection

Press any key to stop the preview stream. Left click to select the top left bounding box corner and left click again to select the bottom right corner.


When using a webcam, no arguments are necessary:


When using a video, the path to the file has to be given as an input parameter:

python /home/cmt/test.avi

It is also possible to specify the initial bounding box on the command line.

python --bbox=123,85,60,140 /home/cmt/test.avi

Use a sequence of numbered image files as an input:

python sequence_dir/{:08d}.jpg

Here, {:08d} is a python format string that is expanded to 00000001.jpg, 00000002.jpg, etc.