#ifndef UTILS_H_
#define UTILS_H_
#include <iostream>
#include "PnPProblem.h"
void drawQuestion(cv::Mat image, cv::Point3f point, cv::Scalar color);
void drawText(cv::Mat image, std::string text, cv::Scalar color);
void drawText2(cv::Mat image, std::string text, cv::Scalar color);
void drawFPS(cv::Mat image, double fps, cv::Scalar color);
void drawConfidence(cv::Mat image, double confidence, cv::Scalar color);
void drawCounter(cv::Mat image, int n, int n_max, cv::Scalar color);
void drawPoints(cv::Mat image, std::vector<cv::Point2f> &list_points_2d, std::vector<cv::Point3f> &list_points_3d, cv::Scalar color);
void draw2DPoints(cv::Mat image, std::vector<cv::Point2f> &list_points, cv::Scalar color);
void drawArrow(cv::Mat image, cv::Point2i p, cv::Point2i q, cv::Scalar color, int arrowMagnitude = 9, int thickness=1, int line_type=8, int shift=0);
void draw3DCoordinateAxes(cv::Mat image, const std::vector<cv::Point2f> &list_points2d);
void drawObjectMesh(cv::Mat image, const Mesh *mesh, PnPProblem *pnpProblem, cv::Scalar color);
double get_translation_error(const cv::Mat &t_true, const cv::Mat &t);
double get_rotation_error(const cv::Mat &R_true, const cv::Mat &R);
cv::Mat rot2euler(const cv::Mat & rotationMatrix);
cv::Mat euler2rot(const cv::Mat & euler);
int StringToInt ( const std::string &Text );
std::string FloatToString ( float Number );
std::string IntToString ( int Number );
#endif