YYPOST群发软件 发表于 2025-3-14 08:59:46

AIWROK软件找图__方法小汇集





// 第一种方法: 定义图像查找函数(参数顺序:查找区域,模板图像,相似度)
function 查找图像(searchRegion, templateImage, similarity) {
    // 获取屏幕截图并转换为Mat(注意尺寸参数需与实际设备匹配)
    var mat = screen.screenShot(720, 1280, 0).getMat();
   
    // 在指定区域内进行模板匹配
    var result = opencv.templateMatch(mat, , similarity, searchRegion, true);
   
    // 处理结果
    if (result) {
      var target = result.getRealRect();
      auto.clickPoint(target.getCenterX(), target.getCenterY());
      return true;
    }
    return false;
}

// 使用示例:
// 1.定义查找区域(相对坐标)
var 查找区域 = ; // 查找区域的左上角和右下角相对屏幕的坐标

// 2.获取模板图像(ES5兼容写法)
var 全屏截图 = screen.screenShotFull(); // 获取全屏截图
var 模板图片 = 全屏截图.cutImagePercent( // 从全屏截图中裁剪出模板图像
    查找区域, // x1
    查找区域, // y1
    查找区域, // x2
    查找区域// y2
).toBase64(); // 将裁剪出来的图像转换为Base64编码
全屏截图.recycle(); // 释放全屏截图资源,避免内存泄漏

// 3.执行查找(参数顺序:区域,模板,相似度)
// 如果在指定的查找区域内找到了与模板图像相似度达到0.8的目标,则自动点击该目标的中心坐标,并返回true
if (查找图像(查找区域, 模板图片, 0.8)) {
    printl("操作成功");
} else {
    printl("未找到目标");
}

//第二个方法, 标准遍历找图函数
function 遍历找图(配置参数) {
    /* 参数说明
       配置参数 = {
          模板区域: ,// 必填,截图区域相对坐标
          查找区域: ,// 必填,匹配范围相对坐标
          二值阈值: ,       // 可选,预处理阈值
          相似度: 0.8            // 匹配精度
       }
    */
   
    // 生成模板图像
    var 全屏截图 = screen.screenShotFull(); // 获取全屏截图
    var 模板图像 = 全屏截图.cutImagePercent( // 从全屏截图中裁剪出模板图像
      配置参数.模板区域,
      配置参数.模板区域,
      配置参数.模板区域,
      配置参数.模板区域
    ).toBase64(); // 将裁剪出来的图像转换为Base64编码
    全屏截图.recycle(); // 释放全屏截图资源,避免内存泄漏

    // 预处理+匹配流程
    var 处理截图 = screen.screenShot(432, 768, 100).getMat(); // 获取屏幕截图并转换为Mat格式
    if(配置参数.二值阈值){
      opencv.threshold(处理截图, 配置参数.二值阈值, 配置参数.二值阈值); // 对图像进行二值化处理
    }
   
    // 在指定的查找区域内,使用指定的相似度对模板图像进行匹配
    var 匹配结果 = opencv.templateMatch(
      处理截图,
      [模板图像],
      配置参数.相似度,
      配置参数.查找区域,
      true
    );

    // 结果处理
    if(匹配结果 && 匹配结果.length > 0){
      for(var i=0; i<匹配结果.length; i++){
            var 坐标 = 匹配结果.getRealRect(); // 获取每个匹配项的实际坐标
            printl('发现目标 '+(i+1)+'# X:'+坐标.x+' Y:'+坐标.y); // 输出发现的目标的坐标信息
            // 自动点击首个目标
            if(i === 0) auto.clickPoint(坐标.getCenterX(), 坐标.getCenterY()); // 如果是第一个匹配项,则点击其中心坐标
      }
      return true;
    }
    return false;
}

/* 使用示例 (符合你截图中的参数需求) */
var 我的配置 = {
    模板区域: , // 截图做模板的区域,相对屏幕的坐标
    查找区域: ,                  // 全屏查找
    二值阈值: ,                  // 启用预处理,设置二值化阈值
    相似度: 0.8                           // 设置匹配精度为0.8
};

// 如果在全屏范围内找到了与模板图像相似度达到0.8的目标,则输出发现的目标的坐标信息,并点击第一个目标的中心坐标,返回true
if(遍历找图(我的配置)){
    printl("任务完成");
} else {
    printl("未发现目标");
}

//第三个方法, 标准区域找图
function 执行找图() {
    // 截图尺寸配置
    var screenWidth = 432;
    var screenHeight = 768;
   
    try {
      // 获取屏幕截图并进行二值化预处理
      var mat = screen.screenShot(screenWidth, screenHeight, 100).getMat(); // 获取屏幕截图并转换为Mat格式
      opencv.threshold(mat, 50, 150); // 对图像进行二值化处理,设置阈值为50到150

      // 使用预设CV配置进行模板匹配
      // '图色120996停止.cv'为预设的配置文件路径,里面包含了模板图像和查找参数等信息
      var 查找结果 = opencv.findImagesEx('图色120996停止.cv');
      
      // 处理匹配结果
      if (查找结果 && 查找结果.length > 0) {
            查找结果.forEach(function(匹配项) {
                var 坐标 = 匹配项.getRealRect(); // 获取每个匹配项的实际坐标
                printl('发现目标 X:' + 坐标.x + ' Y:' + 坐标.y); // 输出发现的目标的坐标信息
                // 自动点击坐标(可选)
                auto.clickPoint(坐标.getCenterX(), 坐标.getCenterY()); // 点击发现的目标的中心坐标
            });
            return true;
      }
      
      printl("当前屏幕未发现目标"); // 如果未发现目标,则输出此信息
      return false;
    } catch (e) {
      printl("发生异常:" + e.message); // 如果在执行过程中发生异常,则捕获并输出异常信息
      return false;
    }
}
// 执行查找流程
// 调用执行找图函数,如果找到目标则输出"任务完成",否则输出"未发现目标"或异常信息
执行找图();

//第四个方法, 标准区域找图
// 屏幕截图预处理函数
function 创建模板截图(区域参数) {
    var 全屏图 = screen.screenShotFull(); // 获取全屏截图
    var 模板图 = 全屏图.cutImagePercent( // 从全屏截图中裁剪出模板图像
      区域参数,
      区域参数,
      区域参数,
      区域参数
    ).toBase64(); // 将裁剪出来的图像转换为Base64编码
    全屏图.recycle(); // 释放全屏截图资源,避免内存泄漏
    return 模板图;
}

// 主查找逻辑
function 执行图像匹配() {
    // 1.动态创建模板(替换为实际区域坐标)
    var 模板组 = [
      创建模板截图(), // 模板1区域
      创建模板截图()// 模板2区域
    ];
   
    // 2.执行模板匹配
    var 屏幕数据 = screen.screenShot(720, 1280, 0).getMat(); // 获取屏幕截图并转换为Mat格式
    var 查找区域 = ; // 设置查找区域的相对坐标
    var 结果 = opencv.templateMatch(
      屏幕数据, // 要查找的屏幕数据
      模板组,   // 匹配的模板组
      0.85,   // 设置匹配精度为0.85
      查找区域, // 设置匹配的区域
      true      // 多目标模式
    );

    // 3.处理匹配结果
    if (结果 && 结果.length > 0) {
      for (var i = 0; i < 结果.length; i++) {
            var 坐标 = 结果.getRealRect(); // 获取每个匹配项的实际坐标
            printl('找到目标 X:' + 坐标.x + ' Y:' + 坐标.y); // 输出找到的目标的坐标信息
            auto.clickPoint(坐标.x, 坐标.y); // 点击找到的目标的中心坐标
      }
      return true;
    }
    return false;
}

// 执行流程
// 调用执行图像匹配函数,如果找到目标则输出"操作成功"并点击目标,否则输出"未找到目标"
if (执行图像匹配()) {
    printl("操作成功");
} else {
    printl("未找到目标");
}

//第五个方法, 使用opencv接口进行多目标查找
var results = opencv.findImagesEx('图色120996停止.cv');

if (results) {
    // 遍历所有找到的结果
    for (var i = 0; i < results.length; i++) {
      // 获取每个结果的坐标信息
      var rect = results.getRealRect(); // 获取匹配项的实际矩形区域
      var x = rect.getCenterX(); // 获取矩形区域中心点的X坐标
      var y = rect.getCenterY(); // 获取矩形区域中心点的Y坐标
      printl('坐标:' + x + ',' + y); // 输出中心点坐标信息
      
      // 如需点击可取消注释下行
      // auto.clickPoint(x, y); // 点击找到的目标的中心坐标
    }
} else {
    printl("未找到目标"); // 如果未找到目标,则输出此信息
}

//第六个方法,动态找图点击
function 简易找图(模板区域, 相似度) {
    try {
      // 获取模板图片
      var 全图 = screen.screenShotFull(); // 获取全屏截图
      var 模板 = 全图.cutImagePercent(
            模板区域,
            模板区域,
            模板区域,
            模板区域
      ).toBase64(); // 将裁剪出来的图像转换为Base64编码
      全图.recycle(); // 释放全屏截图资源,避免内存泄漏

      // 获取当前屏幕
      var 当前画面 = screen.screenShot(720, 1280, 100).getMat(); // 获取屏幕截图并转换为Mat格式
      
      // 执行匹配
      var 结果集 = opencv.templateMatch(
            当前画面, // 要查找的屏幕数据
            [模板],   // 匹配的模板组
            相似度 || 0.8, // 设置匹配精度,默认为0.8
            ,    // 全屏查找
            true         // 多目标模式
      );

      // 处理结果
      if (结果集 && 结果集.length > 0) {
            for(var i=0; i<结果集.length; i++) {
                var 坐标框 = 结果集.getRealRect(); // 获取每个匹配项的实际矩形区域
                // 正确获取中心点坐标的方式 ↓
                var x = 坐표框.getCenterX(); // 获取矩形区域中心点的X坐标
                var y = 坐标框.getCenterY(); // 获取矩形区域中心点的Y坐标
                printl('发现目标' + (i+1) + ' X:' + x + ' Y:' + y); // 输出中心点坐标信息
            }
            return true;
      }
    } catch(e) {
      printl("错误:" + e.toString()); // 如果在执行过程中发生异常,则捕获并输出异常信息
    }
    return false;
}

// 使用示例(需要先截图定义模板区域)
var 我的模板区域 = ; // 查找区域的左上角和右下角相对屏幕的坐标
// 如果在全屏范围内找到了与模板图像相似度达到0.85的目标,则输出发现的目标的坐标信息,并点击目标的中心坐标,返回true
if(简易找图(我的模板区域, 0.85)) {
    printl("查找成功!");
} else {
    printl("查找失败");
}



方法一:定义图像查找函数
[*]功能:在指定的查找区域内查找与模板图像相似度达到设定值的目标,并自动点击该目标的中心位置。
[*]参数:



[*]searchRegion:查找区域的相对坐标,格式为 ,其中 (x1, y1) 是左上角坐标,(x2, y2) 是右下角坐标。
[*]templateImage:模板图像的Base64编码字符串。
[*]similarity:相似度阈值,用于判断是否匹配。

[*]流程:



[*]获取屏幕截图并转换为Mat格式。
[*]在指定区域内进行模板匹配。
[*]如果找到匹配项,则点击其中心位置,并返回true;否则返回false。
方法二:标准遍历找图函数
[*]功能:在指定区域内查找与模板图像相似度达到设定值的目标,并输出所有目标的坐标信息,自动点击首个目标。
[*]参数:



[*]配置参数:一个对象,包含查找区域、模板区域、二值阈值和相似度等配置信息。

[*]流程:



[*]从全屏截图中裁剪出模板图像,并将其转换为Base64编码。
[*]获取屏幕截图并转换为Mat格式。
[*]如果配置了二值阈值,则对图像进行二值化预处理。
[*]在指定的查找区域内进行模板匹配。
[*]如果找到匹配项,则输出每个匹配项的坐标信息,并点击首个匹配项的中心位置,返回true;否则返回false。
方法三:标准区域找图
[*]功能:从预设的配置文件中获取模板图像和查找参数,并在全屏范围内查找与模板图像相似度达到设定值的目标,自动点击首个目标。
[*]流程:



[*]获取屏幕截图并进行二值化预处理。
[*]使用预设的配置文件进行模板匹配。
[*]如果找到匹配项,则输出每个匹配项的坐标信息,并点击首个匹配项的中心位置,返回true;否则返回false。
[*]如果在执行过程中发生异常,则捕获并输出异常信息。
方法四:使用预定义模板进行多目标查找
[*]功能:动态创建模板图像,并在指定区域内查找与模板图像相似度达到设定值的所有目标,自动点击每个找到的目标。
[*]流程:



[*]动态创建模板图像,并将其转换为Base64编码。
[*]获取屏幕截图并转换为Mat格式。
[*]在指定的查找区域内进行模板匹配。
[*]如果找到匹配项,则输出每个匹配项的坐标信息,并点击每个匹配项的中心位置,返回true;否则返回false。
方法五:使用OpenCV接口进行多目标查找
[*]功能:从预设的配置文件中获取模板图像和查找参数,并在全屏范围内查找与模板图像相似度达到设定值的所有目标,输出每个找到的目标的中心坐标。
[*]流程:



[*]使用预设的配置文件进行模板匹配。
[*]如果找到匹配项,则遍历每个匹配项,输出其中心坐标信息。
[*]如需点击可取消注释相关代码行。
方法六:动态找图点击
[*]功能:在全屏范围内查找与模板图像相似度达到设定值的目标,并输出所有目标的中心坐标信息,自动点击每个找到的目标。
[*]参数:



[*]模板区域:查找区域的相对坐标,格式为 。
[*]相似度:相似度阈值,默认为0.8。

[*]流程:



[*]从全屏截图中裁剪出模板图像,并将其转换为Base64编码。
[*]获取屏幕截图并转换为Mat格式。
[*]在全屏范围内进行模板匹配。
[*]如果找到匹配项,则输出每个匹配项的中心坐标信息,并点击每个匹配项的中心位置,返回true;否则返回false。
[*]如果在执行过程中发生异常,则捕获并输出异常信息。
注意事项
[*]所有代码中的相对坐标是相对于屏幕大小的比例值,因此需要确保坐标值正确且与实际屏幕尺寸匹配。
[*]使用Base64编码可以方便地在不同的脚本或系统之间传递图像数据。
[*]释放资源(如recycle())是防止内存泄漏的重要步骤。
[*]使用二值化阈值可以提高图像匹配的准确性,特别是在颜色复杂的背景下。
[*]opencv.findImagesEx()函数通常依赖于预设的配置文件,该文件中包含了模板图像和查找参数等信息。

页: [1]
查看完整版本: AIWROK软件找图__方法小汇集