From 3d375d24a77ca5e8fe8d303d9734f8d994eb29b3 Mon Sep 17 00:00:00 2001 From: status102 <102887808+status102@users.noreply.github.com> Date: Mon, 26 May 2025 20:18:28 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=B0=8Fc=E5=8D=95=E7=8B=AC=E8=AF=86?= =?UTF-8?q?=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Vision/Battle/BattlefieldMatcher.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/MaaCore/Vision/Battle/BattlefieldMatcher.cpp b/src/MaaCore/Vision/Battle/BattlefieldMatcher.cpp index ab406b13cb..0ca7314e50 100644 --- a/src/MaaCore/Vision/Battle/BattlefieldMatcher.cpp +++ b/src/MaaCore/Vision/Battle/BattlefieldMatcher.cpp @@ -116,6 +116,8 @@ BattlefieldMatcher::MatchResult> Battlefield sort_by_horizontal_(flags_prev); bool is_same = true; cv::Mat mask = cv::Mat(m_image.rows, m_image.cols, CV_8UC1, cv::Scalar(0)); + cv::Mat avai_image, avai_image_prev; + cv::Scalar avg, avg_prev; for (int i = 0; i < flags.size(); ++i) { if (dist(flags[i].rect, flags_prev[i].rect) > 3) { is_same = false; @@ -125,10 +127,19 @@ BattlefieldMatcher::MatchResult> Battlefield const auto& flag_res = flags[i]; const auto& avatar_rect = flag_res.rect.move(click_move).move(avatar_move); mask(make_rect(avatar_rect)).setTo(cv::Scalar(255)); - const auto& flag_rect = asst::Rect::bounding_box( - flag_res.rect.move(role_move), // 职业区域 - flag_res.rect.move(cost_move)); // 费用区域 + const auto& flag_rect = asst::Rect::bounding_box(flag_res.rect.move(cost_move)); // 费用区域 mask(make_rect(flag_rect)).setTo(cv::Scalar(255)); + avai_image = m_image(make_rect(flag_res.rect.move(avlb_move))).clone(); + avai_image_prev = m_image_prev(make_rect(flag_res.rect.move(avlb_move))).clone(); + cv::cvtColor(avai_image, avai_image, cv::COLOR_BGR2HSV); + cv::cvtColor(avai_image_prev, avai_image_prev, cv::COLOR_BGR2HSV); + avg = cv::mean(avai_image); + avg_prev = cv::mean(avai_image_prev); + if (abs(avg[2] - avg_prev[2]) > 20) { // 新图干员可用状态和上一帧不一致 + Log.info(__FUNCTION__, "oper available changed, avg:", avg, avg_prev); + is_same = false; + break; + } } if (!is_same) { break;