frameProcessor.hpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // This file is part of OpenCV project.
  2. // It is subject to the license terms in the LICENSE file found in the top-level directory
  3. // of this distribution and at http://opencv.org/license.html.
  4. #ifndef FRAME_PROCESSOR_HPP
  5. #define FRAME_PROCESSOR_HPP
  6. #include <opencv2/core.hpp>
  7. #include <opencv2/calib3d.hpp>
  8. #include <opencv2/objdetect.hpp>
  9. #include "calibCommon.hpp"
  10. #include "calibController.hpp"
  11. namespace calib
  12. {
  13. class FrameProcessor
  14. {
  15. protected:
  16. public:
  17. virtual ~FrameProcessor();
  18. virtual cv::Mat processFrame(const cv::Mat& frame) = 0;
  19. virtual bool isProcessed() const = 0;
  20. virtual void resetState() = 0;
  21. };
  22. class CalibProcessor : public FrameProcessor
  23. {
  24. protected:
  25. cv::Ptr<calibrationData> mCalibData;
  26. TemplateType mBoardType;
  27. cv::Size mBoardSizeUnits;
  28. cv::Size mBoardSizeInnerCorners;
  29. std::vector<cv::Point2f> mTemplateLocations;
  30. std::vector<cv::Point2f> mCurrentImagePoints;
  31. cv::Mat mCurrentCharucoCorners;
  32. cv::Mat mCurrentCharucoIds;
  33. cv::Ptr<cv::SimpleBlobDetector> mBlobDetectorPtr;
  34. cv::aruco::Dictionary mArucoDictionary;
  35. cv::Ptr<cv::aruco::CharucoBoard> mCharucoBoard;
  36. cv::Ptr<cv::aruco::CharucoDetector> detector;
  37. int mNeededFramesNum;
  38. unsigned mDelayBetweenCaptures;
  39. int mCapuredFrames;
  40. double mMaxTemplateOffset;
  41. float mSquareSize;
  42. float mTemplDist;
  43. bool mSaveFrames;
  44. float mZoom;
  45. bool detectAndParseChessboard(const cv::Mat& frame);
  46. bool detectAndParseChAruco(const cv::Mat& frame);
  47. bool detectAndParseCircles(const cv::Mat& frame);
  48. bool detectAndParseACircles(const cv::Mat& frame);
  49. bool detectAndParseDualACircles(const cv::Mat& frame);
  50. void saveFrameData();
  51. void showCaptureMessage(const cv::Mat &frame, const std::string& message);
  52. bool checkLastFrame();
  53. public:
  54. CalibProcessor(cv::Ptr<calibrationData> data, captureParameters& capParams);
  55. virtual cv::Mat processFrame(const cv::Mat& frame) CV_OVERRIDE;
  56. virtual bool isProcessed() const CV_OVERRIDE;
  57. virtual void resetState() CV_OVERRIDE;
  58. ~CalibProcessor() CV_OVERRIDE;
  59. };
  60. enum visualisationMode {Grid, Window};
  61. class ShowProcessor : public FrameProcessor
  62. {
  63. protected:
  64. cv::Ptr<calibrationData> mCalibdata;
  65. cv::Ptr<calibController> mController;
  66. TemplateType mBoardType;
  67. visualisationMode mVisMode;
  68. bool mNeedUndistort;
  69. double mGridViewScale;
  70. double mTextSize;
  71. void drawBoard(cv::Mat& img, cv::InputArray points);
  72. void drawGridPoints(const cv::Mat& frame);
  73. public:
  74. ShowProcessor(cv::Ptr<calibrationData> data, cv::Ptr<calibController> controller, TemplateType board);
  75. virtual cv::Mat processFrame(const cv::Mat& frame) CV_OVERRIDE;
  76. virtual bool isProcessed() const CV_OVERRIDE;
  77. virtual void resetState() CV_OVERRIDE;
  78. void setVisualizationMode(visualisationMode mode);
  79. void switchVisualizationMode();
  80. void clearBoardsView();
  81. void updateBoardsView();
  82. void switchUndistort();
  83. void setUndistort(bool isEnabled);
  84. ~ShowProcessor() CV_OVERRIDE;
  85. };
  86. }
  87. #endif