Newer
Older
PrismSoftware / ECTrainer2 / SceneCamera.cpp

#include <Windows.h>
#include <tchar.h>

#include "ECTrainer.h"
#include "SceneCamera.h"

// コンストラクタ
SceneCamera::SceneCamera(ECTrainer* pEct) 
	:_pEct(pEct)
{

}

// 初期化
bool SceneCamera::Init() {
	_SceneCam.open("rtsp://" ADDR ":8554/live/scene");
	if (!_SceneCam.isOpened()) {
		MessageBox(NULL, _T("cannot open camera " ADDR), NULL, 0);
		return false;
	}

	return true;
}

// ループ
bool SceneCamera::MainLoop() {
	while (_pEct->IsRunning()) {
		// シーン撮影
		cv::Mat scene;
		_SceneCam >> scene;

		cv::Ptr<cv::aruco::Dictionary> dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_50);
		std::vector<int> mids;
		std::vector<std::vector<cv::Point2f>> corners;
		cv::Ptr<cv::aruco::DetectorParameters> parameters = cv::aruco::DetectorParameters::create();
		cv::aruco::detectMarkers(scene, dictionary, corners, mids, parameters);
		cv::aruco::drawDetectedMarkers(scene, corners, mids);
		if (corners.size() > 0) {
			cv::putText(scene, "0", cv::Point((int)corners[0][0].x, (int)corners[0][0].y), cv::FONT_HERSHEY_PLAIN, 2.0, CV_RGB(255, 0, 0));
			cv::putText(scene, "1", corners[0][1], cv::FONT_HERSHEY_PLAIN, 2.0, CV_RGB(255, 0, 0));
			cv::putText(scene, "2", corners[0][2], cv::FONT_HERSHEY_PLAIN, 2.0, CV_RGB(255, 0, 0));
			cv::putText(scene, "3", corners[0][3], cv::FONT_HERSHEY_PLAIN, 2.0, CV_RGB(255, 0, 0));
		}

		_pEct->SetSceneBuffer(scene);
	}

	return true;
}