Newer
Older
PrismSoftware / ECTrainer2 / Marker.h
#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);	// 画像にマーカーを描画
};