diff --git a/3rdparty/include/meojson/json.hpp b/3rdparty/include/meojson/json.hpp index bbef928765..4ce6dba9ab 100644 --- a/3rdparty/include/meojson/json.hpp +++ b/3rdparty/include/meojson/json.hpp @@ -560,7 +560,7 @@ namespace json return _type == value_type::Object; } else { - static_assert(false, "Unsupported type"); + static_assert(!sizeof(Type), "Unsupported type"); } } diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index 50bf95fba3..e2c55a36d9 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -121,7 +121,7 @@ bool asst::BattleHelper::update_deployment(bool init) return false; } - MatchImageAnalyzer avatar_analyzer(image); + MatchImageAnalyzer avatar_analyzer; avatar_analyzer.set_task_info("BattleAvatarData"); auto cur_opers = oper_analyzer.get_opers(); @@ -129,13 +129,15 @@ bool asst::BattleHelper::update_deployment(bool init) for (auto& oper : cur_opers) { if (oper.cooling) { - continue; + // 把环去掉 + avatar_analyzer.set_mask_range(50, 255, true); } - // 把当前ROI放大一点,不然有时候像素歪了容易匹配不上 - avatar_analyzer.set_roi(oper.rect.center_zoom(1.1, WindowWidthDefault, WindowHeightDefault)); + else { + avatar_analyzer.set_mask_range(0, 0); + } + avatar_analyzer.set_image(oper.avatar); double max_socre = 0; - for (const auto& [name, avatar] : m_all_deployment_avatars) { avatar_analyzer.set_templ(avatar); if (!avatar_analyzer.analyze()) { diff --git a/src/MaaCore/Vision/MatchImageAnalyzer.cpp b/src/MaaCore/Vision/MatchImageAnalyzer.cpp index 13d7120860..d878052e8b 100644 --- a/src/MaaCore/Vision/MatchImageAnalyzer.cpp +++ b/src/MaaCore/Vision/MatchImageAnalyzer.cpp @@ -29,14 +29,16 @@ void asst::MatchImageAnalyzer::set_use_cache(bool is_use) noexcept m_use_cache = is_use; } -void asst::MatchImageAnalyzer::set_mask_range(int lower, int upper) noexcept +void asst::MatchImageAnalyzer::set_mask_range(int lower, int upper, bool mask_with_src) noexcept { m_mask_range = std::make_pair(lower, upper); + m_mask_with_src = mask_with_src; } -void asst::MatchImageAnalyzer::set_mask_range(std::pair mask_range) noexcept +void asst::MatchImageAnalyzer::set_mask_range(std::pair mask_range, bool mask_with_src) noexcept { m_mask_range = std::move(mask_range); + m_mask_with_src = mask_with_src; } void asst::MatchImageAnalyzer::set_templ_name(std::string templ_name) noexcept @@ -114,7 +116,7 @@ bool asst::MatchImageAnalyzer::match_templ(const cv::Mat templ) } else { cv::Mat mask; - cv::cvtColor(templ, mask, cv::COLOR_BGR2GRAY); + cv::cvtColor(m_mask_with_src ? image_roi : templ, mask, cv::COLOR_BGR2GRAY); cv::inRange(mask, m_mask_range.first, m_mask_range.second, mask); if (m_mask_with_close) { cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3)); diff --git a/src/MaaCore/Vision/MatchImageAnalyzer.h b/src/MaaCore/Vision/MatchImageAnalyzer.h index dfe5768def..d35db08937 100644 --- a/src/MaaCore/Vision/MatchImageAnalyzer.h +++ b/src/MaaCore/Vision/MatchImageAnalyzer.h @@ -13,8 +13,8 @@ namespace asst virtual bool analyze() override; void set_use_cache(bool is_use) noexcept; - void set_mask_range(int lower, int upper) noexcept; - void set_mask_range(std::pair mask_range) noexcept; + void set_mask_range(int lower, int upper, bool mask_with_src = false) noexcept; + void set_mask_range(std::pair mask_range, bool mask_with_src = false) noexcept; void set_templ_name(std::string templ_name) noexcept; void set_templ(cv::Mat templ) noexcept; void set_threshold(double templ_thres) noexcept; @@ -36,6 +36,7 @@ namespace asst bool m_use_cache = false; Rect m_region_of_appeared; std::pair m_mask_range; + bool m_mask_with_src = false; bool m_mask_with_close = false; }; }