opencv/apps/interactive-calibration/frameProcessor.hpp

106 lines
3.0 KiB
C++
Raw Normal View History

// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
2016-04-08 21:30:56 +08:00
#ifndef FRAME_PROCESSOR_HPP
#define FRAME_PROCESSOR_HPP
#include <opencv2/core.hpp>
#include <opencv2/calib.hpp>
2022-12-28 22:28:59 +08:00
#include <opencv2/objdetect.hpp>
2016-04-08 21:30:56 +08:00
#include "calibCommon.hpp"
#include "calibController.hpp"
namespace calib
{
class FrameProcessor
{
protected:
public:
virtual ~FrameProcessor();
virtual cv::Mat processFrame(const cv::Mat& frame) = 0;
virtual bool isProcessed() const = 0;
virtual void resetState() = 0;
};
class CalibProcessor : public FrameProcessor
{
protected:
cv::Ptr<calibrationData> mCalibData;
TemplateType mBoardType;
cv::Size mBoardSizeUnits;
cv::Size mBoardSizeInnerCorners;
2016-04-08 21:30:56 +08:00
std::vector<cv::Point2f> mTemplateLocations;
std::vector<cv::Point2f> mCurrentImagePoints;
cv::Mat mCurrentCharucoCorners;
cv::Mat mCurrentCharucoIds;
cv::Ptr<cv::SimpleBlobDetector> mBlobDetectorPtr;
cv::aruco::Dictionary mArucoDictionary;
2016-04-08 21:30:56 +08:00
cv::Ptr<cv::aruco::CharucoBoard> mCharucoBoard;
2022-12-28 22:28:59 +08:00
cv::Ptr<cv::aruco::CharucoDetector> detector;
2016-04-08 21:30:56 +08:00
int mNeededFramesNum;
unsigned mDelayBetweenCaptures;
int mCapuredFrames;
double mMaxTemplateOffset;
float mSquareSize;
float mTemplDist;
bool mSaveFrames;
float mZoom;
2016-04-08 21:30:56 +08:00
bool detectAndParseChessboard(const cv::Mat& frame);
bool detectAndParseChAruco(const cv::Mat& frame);
2022-06-22 20:04:46 +08:00
bool detectAndParseCircles(const cv::Mat& frame);
2016-04-08 21:30:56 +08:00
bool detectAndParseACircles(const cv::Mat& frame);
bool detectAndParseDualACircles(const cv::Mat& frame);
void saveFrameData();
void showCaptureMessage(const cv::Mat &frame, const std::string& message);
bool checkLastFrame();
public:
CalibProcessor(cv::Ptr<calibrationData> data, captureParameters& capParams);
2018-03-20 20:53:57 +08:00
virtual cv::Mat processFrame(const cv::Mat& frame) CV_OVERRIDE;
virtual bool isProcessed() const CV_OVERRIDE;
virtual void resetState() CV_OVERRIDE;
~CalibProcessor() CV_OVERRIDE;
2016-04-08 21:30:56 +08:00
};
enum visualisationMode {Grid, Window};
class ShowProcessor : public FrameProcessor
{
protected:
cv::Ptr<calibrationData> mCalibdata;
cv::Ptr<calibController> mController;
TemplateType mBoardType;
visualisationMode mVisMode;
bool mNeedUndistort;
double mGridViewScale;
double mTextSize;
void drawBoard(cv::Mat& img, cv::InputArray points);
void drawGridPoints(const cv::Mat& frame);
public:
ShowProcessor(cv::Ptr<calibrationData> data, cv::Ptr<calibController> controller, TemplateType board);
2018-03-20 20:53:57 +08:00
virtual cv::Mat processFrame(const cv::Mat& frame) CV_OVERRIDE;
virtual bool isProcessed() const CV_OVERRIDE;
virtual void resetState() CV_OVERRIDE;
2016-04-08 21:30:56 +08:00
void setVisualizationMode(visualisationMode mode);
void switchVisualizationMode();
void clearBoardsView();
void updateBoardsView();
void switchUndistort();
void setUndistort(bool isEnabled);
2018-03-20 20:53:57 +08:00
~ShowProcessor() CV_OVERRIDE;
2016-04-08 21:30:56 +08:00
};
}
#endif