 | |  |  |
- // 第一种方法: 定义图像查找函数(参数顺序:查找区域,模板图像,相似度)
- function 查找图像(searchRegion, templateImage, similarity) {
- // 获取屏幕截图并转换为Mat(注意尺寸参数需与实际设备匹配)
- var mat = screen.screenShot(720, 1280, 0).getMat();
-
- // 在指定区域内进行模板匹配
- var result = opencv.templateMatch(mat, [templateImage], similarity, searchRegion, true);
-
- // 处理结果
- if (result) {
- var target = result[0].getRealRect();
- auto.clickPoint(target.getCenterX(), target.getCenterY());
- return true;
- }
- return false;
- }
- // 使用示例:
- // 1.定义查找区域(相对坐标[x1,y1,x2,y2])
- var 查找区域 = [0.3524, 0.3115, 0.4253, 0.3555]; // 查找区域的左上角和右下角相对屏幕的坐标
- // 2.获取模板图像(ES5兼容写法)
- var 全屏截图 = screen.screenShotFull(); // 获取全屏截图
- var 模板图片 = 全屏截图.cutImagePercent( // 从全屏截图中裁剪出模板图像
- 查找区域[0], // x1
- 查找区域[1], // y1
- 查找区域[2], // x2
- 查找区域[3] // y2
- ).toBase64(); // 将裁剪出来的图像转换为Base64编码
- 全屏截图.recycle(); // 释放全屏截图资源,避免内存泄漏
- // 3.执行查找(参数顺序:区域,模板,相似度)
- // 如果在指定的查找区域内找到了与模板图像相似度达到0.8的目标,则自动点击该目标的中心坐标,并返回true
- if (查找图像(查找区域, 模板图片, 0.8)) {
- printl("操作成功");
- } else {
- printl("未找到目标");
- }
- //第二个方法, 标准遍历找图函数
- function 遍历找图(配置参数) {
- /* 参数说明
- 配置参数 = {
- 模板区域: [x1,y1,x2,y2], // 必填,截图区域相对坐标
- 查找区域: [x1,y1,x2,y2], // 必填,匹配范围相对坐标
- 二值阈值: [50,150], // 可选,预处理阈值
- 相似度: 0.8 // 匹配精度
- }
- */
-
- // 生成模板图像
- var 全屏截图 = screen.screenShotFull(); // 获取全屏截图
- var 模板图像 = 全屏截图.cutImagePercent( // 从全屏截图中裁剪出模板图像
- 配置参数.模板区域[0],
- 配置参数.模板区域[1],
- 配置参数.模板区域[2],
- 配置参数.模板区域[3]
- ).toBase64(); // 将裁剪出来的图像转换为Base64编码
- 全屏截图.recycle(); // 释放全屏截图资源,避免内存泄漏
- // 预处理+匹配流程
- var 处理截图 = screen.screenShot(432, 768, 100).getMat(); // 获取屏幕截图并转换为Mat格式
- if(配置参数.二值阈值){
- opencv.threshold(处理截图, 配置参数.二值阈值[0], 配置参数.二值阈值[1]); // 对图像进行二值化处理
- }
-
- // 在指定的查找区域内,使用指定的相似度对模板图像进行匹配
- var 匹配结果 = opencv.templateMatch(
- 处理截图,
- [模板图像],
- 配置参数.相似度,
- 配置参数.查找区域,
- true
- );
- // 结果处理
- if(匹配结果 && 匹配结果.length > 0){
- for(var i=0; i<匹配结果.length; i++){
- var 坐标 = 匹配结果[i].getRealRect(); // 获取每个匹配项的实际坐标
- printl('发现目标 '+(i+1)+'# X:'+坐标.x+' Y:'+坐标.y); // 输出发现的目标的坐标信息
- // 自动点击首个目标
- if(i === 0) auto.clickPoint(坐标.getCenterX(), 坐标.getCenterY()); // 如果是第一个匹配项,则点击其中心坐标
- }
- return true;
- }
- return false;
- }
- /* 使用示例 (符合你截图中的参数需求) */
- var 我的配置 = {
- 模板区域: [0.1181,0.4453,0.1875,0.4873], // 截图做模板的区域,相对屏幕的坐标
- 查找区域: [0,0,1,1], // 全屏查找
- 二值阈值: [50,150], // 启用预处理,设置二值化阈值
- 相似度: 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( // 从全屏截图中裁剪出模板图像
- 区域参数[0],
- 区域参数[1],
- 区域参数[2],
- 区域参数[3]
- ).toBase64(); // 将裁剪出来的图像转换为Base64编码
- 全屏图.recycle(); // 释放全屏截图资源,避免内存泄漏
- return 模板图;
- }
- // 主查找逻辑
- function 执行图像匹配() {
- // 1.动态创建模板(替换为实际区域坐标)
- var 模板组 = [
- 创建模板截图([0.1, 0.2, 0.3, 0.4]), // 模板1区域
- 创建模板截图([0.5, 0.6, 0.7, 0.8]) // 模板2区域
- ];
-
- // 2.执行模板匹配
- var 屏幕数据 = screen.screenShot(720, 1280, 0).getMat(); // 获取屏幕截图并转换为Mat格式
- var 查找区域 = [0.5174, 0.2871, 0.7778, 0.416]; // 设置查找区域的相对坐标
- var 结果 = opencv.templateMatch(
- 屏幕数据, // 要查找的屏幕数据
- 模板组, // 匹配的模板组
- 0.85, // 设置匹配精度为0.85
- 查找区域, // 设置匹配的区域
- true // 多目标模式
- );
- // 3.处理匹配结果
- if (结果 && 结果.length > 0) {
- for (var i = 0; i < 结果.length; i++) {
- var 坐标 = 结果[i].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[i].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(
- 模板区域[0],
- 模板区域[1],
- 模板区域[2],
- 模板区域[3]
- ).toBase64(); // 将裁剪出来的图像转换为Base64编码
- 全图.recycle(); // 释放全屏截图资源,避免内存泄漏
- // 获取当前屏幕
- var 当前画面 = screen.screenShot(720, 1280, 100).getMat(); // 获取屏幕截图并转换为Mat格式
-
- // 执行匹配
- var 结果集 = opencv.templateMatch(
- 当前画面, // 要查找的屏幕数据
- [模板], // 匹配的模板组
- 相似度 || 0.8, // 设置匹配精度,默认为0.8
- [0,0,1,1], // 全屏查找
- true // 多目标模式
- );
- // 处理结果
- if (结果集 && 结果集.length > 0) {
- for(var i=0; i<结果集.length; i++) {
- var 坐标框 = 结果集[i].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.3,0.2,0.7,0.6]; // [x1,y1,x2,y2] 查找区域的左上角和右下角相对屏幕的坐标
- // 如果在全屏范围内找到了与模板图像相似度达到0.85的目标,则输出发现的目标的坐标信息,并点击目标的中心坐标,返回true
- if(简易找图(我的模板区域, 0.85)) {
- printl("查找成功!");
- } else {
- printl("查找失败");
- }
复制代码
方法一:定义图像查找函数- 功能:在指定的查找区域内查找与模板图像相似度达到设定值的目标,并自动点击该目标的中心位置。
- 参数:
- searchRegion:查找区域的相对坐标,格式为 [x1, y1, x2, y2],其中 (x1, y1) 是左上角坐标,(x2, y2) 是右下角坐标。
- templateImage:模板图像的Base64编码字符串。
- similarity:相似度阈值,用于判断是否匹配。
- 获取屏幕截图并转换为Mat格式。
- 在指定区域内进行模板匹配。
- 如果找到匹配项,则点击其中心位置,并返回true;否则返回false。
方法二:标准遍历找图函数- 功能:在指定区域内查找与模板图像相似度达到设定值的目标,并输出所有目标的坐标信息,自动点击首个目标。
- 参数:
- 配置参数:一个对象,包含查找区域、模板区域、二值阈值和相似度等配置信息。
- 从全屏截图中裁剪出模板图像,并将其转换为Base64编码。
- 获取屏幕截图并转换为Mat格式。
- 如果配置了二值阈值,则对图像进行二值化预处理。
- 在指定的查找区域内进行模板匹配。
- 如果找到匹配项,则输出每个匹配项的坐标信息,并点击首个匹配项的中心位置,返回true;否则返回false。
方法三:标准区域找图- 功能:从预设的配置文件中获取模板图像和查找参数,并在全屏范围内查找与模板图像相似度达到设定值的目标,自动点击首个目标。
- 流程:
- 获取屏幕截图并进行二值化预处理。
- 使用预设的配置文件进行模板匹配。
- 如果找到匹配项,则输出每个匹配项的坐标信息,并点击首个匹配项的中心位置,返回true;否则返回false。
- 如果在执行过程中发生异常,则捕获并输出异常信息。
方法四:使用预定义模板进行多目标查找- 功能:动态创建模板图像,并在指定区域内查找与模板图像相似度达到设定值的所有目标,自动点击每个找到的目标。
- 流程:
- 动态创建模板图像,并将其转换为Base64编码。
- 获取屏幕截图并转换为Mat格式。
- 在指定的查找区域内进行模板匹配。
- 如果找到匹配项,则输出每个匹配项的坐标信息,并点击每个匹配项的中心位置,返回true;否则返回false。
方法五:使用OpenCV接口进行多目标查找- 功能:从预设的配置文件中获取模板图像和查找参数,并在全屏范围内查找与模板图像相似度达到设定值的所有目标,输出每个找到的目标的中心坐标。
- 流程:
- 使用预设的配置文件进行模板匹配。
- 如果找到匹配项,则遍历每个匹配项,输出其中心坐标信息。
- 如需点击可取消注释相关代码行。
方法六:动态找图点击- 功能:在全屏范围内查找与模板图像相似度达到设定值的目标,并输出所有目标的中心坐标信息,自动点击每个找到的目标。
- 参数:
- 模板区域:查找区域的相对坐标,格式为 [x1, y1, x2, y2]。
- 相似度:相似度阈值,默认为0.8。
- 从全屏截图中裁剪出模板图像,并将其转换为Base64编码。
- 获取屏幕截图并转换为Mat格式。
- 在全屏范围内进行模板匹配。
- 如果找到匹配项,则输出每个匹配项的中心坐标信息,并点击每个匹配项的中心位置,返回true;否则返回false。
- 如果在执行过程中发生异常,则捕获并输出异常信息。
注意事项- 所有代码中的相对坐标是相对于屏幕大小的比例值,因此需要确保坐标值正确且与实际屏幕尺寸匹配。
- 使用Base64编码可以方便地在不同的脚本或系统之间传递图像数据。
- 释放资源(如recycle())是防止内存泄漏的重要步骤。
- 使用二值化阈值可以提高图像匹配的准确性,特别是在颜色复杂的背景下。
- opencv.findImagesEx()函数通常依赖于预设的配置文件,该文件中包含了模板图像和查找参数等信息。
| |  | |  |
|