Program Listing for File cameraparameters.h

Return to documentation for file (include/aruco/cameraparameters.h)

#ifndef _Aruco_CameraParameters_H
#define _Aruco_CameraParameters_H

#include "aruco_export.h"
#include <opencv2/core/core.hpp>
#include <string>
#include <stdexcept>

namespace aruco
{
class ARUCO_EXPORT CameraParameters
{
public:
  // 3x3 matrix (fx 0 cx, 0 fy cy, 0 0 1)
  cv::Mat CameraMatrix;
  //  distortion matrix
  cv::Mat Distorsion;
  // size of the image
  cv::Size CamSize;

  // 3x1 matrix (Tx, Ty, Tz), usually 0 for non-stereo cameras or stereo left cameras
  cv::Mat ExtrinsicMatrix;

  CameraParameters();
  CameraParameters(cv::Mat cameraMatrix, cv::Mat distorsionCoeff, cv::Size size);
  void setParams(cv::Mat cameraMatrix, cv::Mat distorsionCoeff, cv::Size size);
  CameraParameters(const CameraParameters &CI);

  bool isValid() const
  {
    return CameraMatrix.rows != 0 && CameraMatrix.cols != 0 && Distorsion.rows != 0 &&
           Distorsion.cols != 0 && CamSize.width != -1 && CamSize.height != -1;
  }
  CameraParameters &operator=(const CameraParameters &CI);

  void saveToFile(std::string path, bool inXML = true);

  void readFromXMLFile(std::string filePath);

  void resize(cv::Size size);

  static cv::Point3f getCameraLocation(const cv::Mat &Rvec, const cv::Mat &Tvec);

  void glGetProjectionMatrix(cv::Size orgImgSize, cv::Size size, double proj_matrix[16],
                             double gnear, double gfar, bool invert = false);

  void OgreGetProjectionMatrix(cv::Size orgImgSize, cv::Size size, double proj_matrix[16],
                               double gnear, double gfar, bool invert = false);

  static cv::Mat getRTMatrix(const cv::Mat &R_, const cv::Mat &T_, int forceType);


  void clear();

  ARUCO_EXPORT friend std::ostream &operator<<(std::ostream &str, const CameraParameters &cp);
  ARUCO_EXPORT friend std::istream &operator>>(std::istream &str, CameraParameters &cp);

private:
  // GL routines

  static void argConvGLcpara2(double cparam[3][4], int width, int height, double gnear,
                              double gfar, double m[16], bool invert);
  static int arParamDecompMat(double source[3][4], double cpara[3][4], double trans[3][4]);
  static double norm(double a, double b, double c);
  static double dot(double a1, double a2, double a3, double b1, double b2, double b3);
};
}  // namespace aruco
#endif