Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _DETECT_CALIBRATION_PATTERN_
00031 #define _DETECT_CALIBRATION_PATTERN_
00032
00033 #include <opencv2/core/core.hpp>
00034 #include <opencv2/calib3d/calib3d.hpp>
00035 #include <opencv2/calib3d/calib3d.hpp>
00036 #include <opencv2/highgui/highgui.hpp>
00037 #include <opencv2/imgproc/imgproc.hpp>
00038
00039 #include <Eigen/Dense>
00040 #include <Eigen/Geometry>
00041 #include <Eigen/StdVector>
00042
00043 #include <iostream>
00044 #include <stdexcept>
00045
00046 using namespace std;
00047
00048 enum Pattern
00049 {
00050 CHESSBOARD, CIRCLES_GRID, ASYMMETRIC_CIRCLES_GRID
00051 };
00052
00053 typedef std::vector<cv::Point3f> object_pts_t;
00054 typedef std::vector<cv::Point2f> observation_pts_t;
00055
00056 void convertCVtoEigen(cv::Mat& tvec, cv::Mat& R, Eigen::Vector3f& translation, Eigen::Quaternionf& orientation);
00057
00058 class PatternDetector
00059 {
00060 public:
00061 PatternDetector() { }
00062
00063 static object_pts_t calcChessboardCorners(cv::Size boardSize, float squareSize, Pattern patternType = CHESSBOARD,
00064 cv::Point3f offset = cv::Point3f());
00065
00066 int detectPattern(cv::Mat& image_in, Eigen::Vector3f& translation, Eigen::Quaternionf& orientation,
00067 cv::Mat& image_out);
00068
00069 void setCameraMatrices(cv::Matx33d K_, cv::Mat D_);
00070
00071 void setPattern(cv::Size grid_size_, float square_size_, Pattern pattern_type_, cv::Point3f offset_ = cv::Point3f());
00072
00073 public:
00074 cv::Matx33d K;
00075 cv::Mat D;
00076 cv::Mat rvec, tvec, R;
00077
00078 Pattern pattern_type;
00079 cv::Size grid_size;
00080 float square_size;
00081 object_pts_t ideal_points;
00082 };
00083
00084 #endif