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,
00064 float squareSize,
00065 Pattern patternType = CHESSBOARD,
00066 cv::Point3f offset = cv::Point3f());
00067
00068 int detectPattern(cv::Mat& image_in, Eigen::Vector3f& translation, Eigen::Quaternionf& orientation, cv::Mat& image_out);
00069
00070 void setCameraMatrices(cv::Mat K_, cv::Mat D_);
00071
00072 void setPattern(cv::Size grid_size_, float square_size_,
00073 Pattern pattern_type_, cv::Point3f offset_ = cv::Point3f());
00074
00075 public:
00076 cv::Mat K;
00077 cv::Mat D;
00078 cv::Mat rvec, tvec, R;
00079
00080 Pattern pattern_type;
00081 cv::Size grid_size;
00082 float square_size;
00083 object_pts_t ideal_points;
00084 };
00085
00086 #endif