Path: blob/master/apps/interactive-calibration/frameProcessor.hpp
16337 views
// This file is part of OpenCV project.1// It is subject to the license terms in the LICENSE file found in the top-level directory2// of this distribution and at http://opencv.org/license.html.34#ifndef FRAME_PROCESSOR_HPP5#define FRAME_PROCESSOR_HPP67#include <opencv2/core.hpp>8#include <opencv2/calib3d.hpp>9#ifdef HAVE_OPENCV_ARUCO10#include <opencv2/aruco/charuco.hpp>11#endif1213#include "calibCommon.hpp"14#include "calibController.hpp"1516namespace calib17{18class FrameProcessor19{20protected:2122public:23virtual ~FrameProcessor();24virtual cv::Mat processFrame(const cv::Mat& frame) = 0;25virtual bool isProcessed() const = 0;26virtual void resetState() = 0;27};2829class CalibProcessor : public FrameProcessor30{31protected:32cv::Ptr<calibrationData> mCalibData;33TemplateType mBoardType;34cv::Size mBoardSize;35std::vector<cv::Point2f> mTemplateLocations;36std::vector<cv::Point2f> mCurrentImagePoints;37cv::Mat mCurrentCharucoCorners;38cv::Mat mCurrentCharucoIds;3940cv::Ptr<cv::SimpleBlobDetector> mBlobDetectorPtr;41#ifdef HAVE_OPENCV_ARUCO42cv::Ptr<cv::aruco::Dictionary> mArucoDictionary;43cv::Ptr<cv::aruco::CharucoBoard> mCharucoBoard;44#endif4546int mNeededFramesNum;47unsigned mDelayBetweenCaptures;48int mCapuredFrames;49double mMaxTemplateOffset;50float mSquareSize;51float mTemplDist;5253bool detectAndParseChessboard(const cv::Mat& frame);54bool detectAndParseChAruco(const cv::Mat& frame);55bool detectAndParseACircles(const cv::Mat& frame);56bool detectAndParseDualACircles(const cv::Mat& frame);57void saveFrameData();58void showCaptureMessage(const cv::Mat &frame, const std::string& message);59bool checkLastFrame();6061public:62CalibProcessor(cv::Ptr<calibrationData> data, captureParameters& capParams);63virtual cv::Mat processFrame(const cv::Mat& frame) CV_OVERRIDE;64virtual bool isProcessed() const CV_OVERRIDE;65virtual void resetState() CV_OVERRIDE;66~CalibProcessor() CV_OVERRIDE;67};6869enum visualisationMode {Grid, Window};7071class ShowProcessor : public FrameProcessor72{73protected:74cv::Ptr<calibrationData> mCalibdata;75cv::Ptr<calibController> mController;76TemplateType mBoardType;77visualisationMode mVisMode;78bool mNeedUndistort;79double mGridViewScale;80double mTextSize;8182void drawBoard(cv::Mat& img, cv::InputArray points);83void drawGridPoints(const cv::Mat& frame);84public:85ShowProcessor(cv::Ptr<calibrationData> data, cv::Ptr<calibController> controller, TemplateType board);86virtual cv::Mat processFrame(const cv::Mat& frame) CV_OVERRIDE;87virtual bool isProcessed() const CV_OVERRIDE;88virtual void resetState() CV_OVERRIDE;8990void setVisualizationMode(visualisationMode mode);91void switchVisualizationMode();92void clearBoardsView();93void updateBoardsView();9495void switchUndistort();96void setUndistort(bool isEnabled);97~ShowProcessor() CV_OVERRIDE;98};99100}101102103#endif104105106