#pragma once
#include "GOpenCV.h"
#include "RingBuffer.h"
#include <vector>
class Marker
{
const cv::Point SIZE = cv::Point(100, 100); // ARマーカーのサイズ
const cv::Point MARGIN = cv::Point(10, 10); // ARマーカー周囲枠の幅
const float OUTER_MARGIN = 0.01F; // マーカー描画用
std::vector<std::vector<cv::Point2f>> _Corners; // マーカー頂点座標(提示画像座標)
cv::Ptr<cv::aruco::Dictionary> _Dictionary; // ARマーカー辞書セット
bool _detected; // マーカー検出可否状態
RingBuffer<cv::Mat> _HomographyV2I; // 変換行列 視野画像→提示画像
// マーカー頂点の生成
void CalcMarkerCorners(cv::Size imgsize);
public:
const cv::Size IMGSIZE = cv::Size(1920, 1080); // 提示画像サイズ
// コンストラクタ
Marker();
// マーカー検出
void Detect(cv::Mat& img);
// マーカー検出状態を取得
bool IsDetected() { return _detected; }
// 座標変換(視野画像座標→画像座標)
cv::Point2f ConvV2I(cv::Point gazeV);
// 変換行列を取得
cv::Mat GetHomography() { return _HomographyV2I.Get(); }
//void DrawMarker(cv::Mat& img); // 画像にマーカーを描画
};