//------------------------------------------------------------------------------
//
//  Project:   Anonymizer
//
//             Brno University of Technology
//             Faculty of Information Technology
//
//------------------------------------------------------------------------------
//
//      This project was financially supported by project VG20102015006 funds
//           provided by Ministry of the Interior of the Czech republic.
//
//------------------------------------------------------------------------------
/*!

@file      trackingalgorithm.h
@brief     Header file
@details   Details
@authors   Martin Borek (mborekcz@gmail.com)
@authors   Filip Orsag (orsag@fit.vutbr.cz)
@date      2014-2015
@note      This project was supported by MV CR project VG20102015006.
@copyright BUT OPEN SOURCE LICENCE (see License.txt)

*/

#ifndef TRACKINGALGORITHM_H
#define TRACKINGALGORITHM_H

#include "selection.h"

#include <opencv/cv.h>
#include <opencv/cvaux.h>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>

class TrackingAlgorithm
{

public:
    /**
     * Constructor
     * @param initialFrame Data of the first frame
     * @param initialPosition Position of the object in the first frame
     * @param centerizedPosition Returned position of the object
     */
    TrackingAlgorithm(cv::Mat const &initialFrame, Selection const &initialPosition, Selection &centerizedPosition);

    /**
     * Destructor
     */
    ~TrackingAlgorithm();

    /**
     * Tracks the next provided frame.
     * @param nextImage The next image for tracking
     * @return Position of the object
     */
    Selection track_next_frame(cv::Mat const &nextImage);

private:
    void *particle;
    IplImage* reference;
    CvSize resize;
    int pDyn;
};

#endif // TRACKINGALGORITHM_H
