Files
MaaAssistantArknights/src/MaaCore/Vision/BestMatcher.cpp
2023-04-29 16:20:12 +08:00

59 lines
1.4 KiB
C++

#include "BestMatcher.h"
#include "Utils/NoWarningCV.h"
#include "Config/TaskData.h"
#include "Config/TemplResource.h"
#include "Matcher.h"
#include "Utils/Logger.hpp"
#include "Utils/StringMisc.hpp"
using namespace asst;
void BestMatcher::append_templ(std::string name, const cv::Mat& templ)
{
m_templs.emplace_back(TemplInfo { std::move(name), templ });
}
BestMatcher::ResultOpt BestMatcher::analyze() const
{
Matcher match_analyzer(m_image, m_roi);
match_analyzer.set_params(m_params);
#ifdef ASST_DEBUG
match_analyzer.set_log_tracing(m_log_tracing);
#else
match_analyzer.set_log_tracing(false);
#endif
Result result;
for (const auto& templ_info : m_templs) {
auto&& [name, templ] = templ_info;
if (templ.empty()) {
match_analyzer.set_templ(name);
}
else {
match_analyzer.set_templ(templ);
}
const auto& cur_opt = match_analyzer.analyze();
if (!cur_opt) {
continue;
}
const auto& cur_matched = cur_opt.value();
if (result.score < cur_matched.score) {
result = Result { .rect = cur_matched.rect, .score = cur_matched.score, .templ_info = templ_info };
}
}
if (!result.score) {
return std::nullopt;
}
if (m_log_tracing) {
Log.trace("The best match is", result.to_string(), result.templ_info.name);
}
m_result = std::move(result);
return m_result;
}