fix: 修复肉鸽编队偶现少选一个人的问题

fix https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/1417
This commit is contained in:
MistEO
2022-08-02 22:15:20 +08:00
parent 76fcfaa0ea
commit 628b962615
3 changed files with 31 additions and 19 deletions

View File

@@ -7491,11 +7491,19 @@
},
"Roguelike1FormationOperSelected": {
"template": "empty.png",
"templThreshold": 18000,
"templThreshold": 1000,
"templThreshold_Doc": "这个任务中作为符合range的像素点数量阈值",
"maskRange_Doc": "拿来做H通道的范围",
"maskRange": [
95,
105
],
"specificRect_Doc": "拿来做S、V通道的范围",
"specificRect": [
170,
210,
70,
140
]
},
"Roguelike1FormationConfirm": {

View File

@@ -49,20 +49,24 @@ bool asst::RoguelikeFormationImageAnalyzer::selected_analyze(const Rect& roi)
{
cv::Mat img_roi = m_image(utils::make_rect<cv::Rect>(roi));
cv::Mat hsv;
cv::cvtColor(img_roi, hsv, cv::COLOR_BGR2HSV);
const auto selected_task_ptr = Task.get<MatchTaskInfo>("Roguelike1FormationOperSelected");
cv::cvtColor(img_roi, hsv, cv::COLOR_BGR2HSV);
std::vector<cv::Mat> channels;
cv::split(hsv, channels);
int mask_lowb = selected_task_ptr->mask_range.first;
int mask_uppb = selected_task_ptr->mask_range.second;
int h_low = selected_task_ptr->mask_range.first;
int h_up = selected_task_ptr->mask_range.second;
int s_low = selected_task_ptr->specific_rect.x;
int s_up = selected_task_ptr->specific_rect.y;
int v_low = selected_task_ptr->specific_rect.width;
int v_up = selected_task_ptr->specific_rect.height;
cv::Mat bin;
cv::inRange(hsv, cv::Scalar(h_low, s_low, v_low), cv::Scalar(h_up, s_up, v_up), bin);
int count = 0;
auto& h_channel = channels.at(0);
for (int i = 0; i != h_channel.rows; ++i) {
for (int j = 0; j != h_channel.cols; ++j) {
cv::uint8_t value = h_channel.at<cv::uint8_t>(i, j);
if (mask_lowb < value && value < mask_uppb) {
for (int i = 0; i != bin.rows; ++i) {
for (int j = 0; j != bin.cols; ++j) {
cv::uint8_t value = bin.at<cv::uint8_t>(i, j);
if (value) {
++count;
}
}

View File

@@ -79,13 +79,13 @@ int main([[maybe_unused]] int argc, char** argv)
//AsstAppendTask(ptr, "Award", nullptr);
AsstAppendTask(ptr, "Roguelike", R"(
{
"squad": "突击战术分队",
"roles": "近卫",
"core_char": "棘刺"
}
)");
// AsstAppendTask(ptr, "Roguelike", R"(
//{
// "squad": "突击战术分队",
// "roles": "近卫",
// "core_char": "棘刺"
//}
//)");
//AsstAppendTask(ptr, "Copilot", R"(
//{
@@ -94,7 +94,7 @@ int main([[maybe_unused]] int argc, char** argv)
//}
//)");
//AsstAppendTask(ptr, "Debug", nullptr);
AsstAppendTask(ptr, "Debug", nullptr);
AsstStart(ptr);