#ifndef CVUTILS_HPP
#define CVUTILS_HPP
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
class CvCapture;
//template<typename T> class Point_<T>;
/// constant that indicates if the image should be flipped
//static const int flipImage = CV_CVTIMG_FLIP;
/** Projects a point with the homography matrix
use perspectiveTransform for arrays of points. */
cv::Point2f project(const cv::Point2f& p, const cv::Mat& homography);
/** Projects a point with the camera matrix */
cv::Point2f cameraProject(const cv::Point2f& p, const cv::Mat& cameraMatrix);
/** Loads a cv mat from a text file where the numbers are saved line by line separated by separator */
cv::Mat loadMat(const std::string& filename, const std::string& separator);
//template<typename T>
//float scalarProduct(const cv::Point_<T>& v1, const cv::Point_<T>& v2) { return v1.x*v2.x+v1.y*v2.y;}
void keyPoints2Points(const std::vector<cv::KeyPoint>& kpts, std::vector<cv::Point2f>& pts, const bool& clearPts = true);
/** Allocates a new IplImage. */
// IplImage* allocateImage(const int& width, const int& height, const int& depth, const int& channels);
// IplImage* allocateImage(const CvSize& size, const int& depth, const int& channels);
/** Goes to the target frame number, by querying frame,
supposing the video input is currently at current frame number.
Returns the frame number that was reached.*/
// int goToFrameNum(CvCapture* inputVideo, const int& currentFrameNum, const int& targetFrameNum);
/// Pre-defined colors
class Colors {
public:
static const int nColors = 8;
static const cv::Scalar color[];
static cv::Scalar black(void);
static cv::Scalar red(void);
static cv::Scalar green(void);
static cv::Scalar blue(void);
static cv::Scalar white(void);
static cv::Scalar magenta(void);
static cv::Scalar cyan(void);
static cv::Scalar yellow(void);
/** Maps integers to primary colors. */
static cv::Scalar color3(const int& num);
static cv::Scalar color8(const int& num);
};
#endif