B2B网络软件
标题:
AIWROK软件苹果系统找图方法完整示例集合
[打印本页]
作者:
YYPOST群发软件
时间:
3 小时前
标题:
AIWROK软件苹果系统找图方法完整示例集合
AIWROK软件苹果系统找图方法完整示例集合
1.png
(1 MB, 下载次数: 0)
下载附件
3 小时前
上传
2.png
(1016.39 KB, 下载次数: 0)
下载附件
3 小时前
上传
// 苹果系统找图方法汇集示例
// 交流QQ群711841924
// 苹果系统找图方法完整示例集合
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function main() {
printl("========== 苹果系统找图方法汇集示例 ==========\n");
example1_findImagesEx(); // 示例1: CV文件模板匹配找图(最基础用法)
example2_findImages(); // 示例2: 多图查找(支持超时和质量设置)
example3_templateMatch(); // 示例3: 多模板匹配查找
example4_findImagesEx_multi(); // 示例4: 单CV文件查找多个目标
example5_findImages_region(); // 示例5: 指定区域找图
example6_findImages_timeout(); // 示例6: 带超时的找图
example7_templateMatch_best(); // 示例7: 只返回最佳匹配
example8_findImages_quality(); // 示例8: 不同截图质量的找图
example9_templateMatch_region(); // 示例9: 指定区域的模板匹配
example10_findImages_threshold(); // 示例10: 不同相似度阈值的找图
example11_comprehensive_flow(); // 示例11: 综合自动化流程(实战案例)
printl("\n========== 所有示例执行完毕 ==========");
}
// 方法一:findImagesEx - CV文件模板匹配找图(最基础用法)
function example1_findImagesEx() {
printl("【示例1】findImagesEx - CV文件模板匹配找图");
printl("适用场景:查找单个图片模板,最简单直接的找图方法");
printl("演示效果:交替点击两个不同的目标");
printl("等待2秒确保屏幕加载完成...");
sleep(2000);
try {
var detects1 = opencv.findImagesEx('图色769598.cv');
if (detects1 != null && detects1.length > 0) {
printl("✓ 找到目标1,数量: " + detects1.length);
var rect1 = detects1[0].getRect();
printl("目标1中心点: x=" + rect1.getCenterX() + ", y=" + rect1.getCenterY());
printl("点击目标1");
detects1[0].clickRandom();
sleep(1000);
} else {
printl("✗ 未找到目标1,等待1秒后重试...");
sleep(1000);
detects1 = opencv.findImagesEx('图色769598.cv');
if (detects1 != null && detects1.length > 0) {
printl("✓ 重试后找到目标1,数量: " + detects1.length);
var rect1 = detects1[0].getRect();
printl("目标1中心点: x=" + rect1.getCenterX() + ", y=" + rect1.getCenterY());
printl("点击目标1");
detects1[0].clickRandom();
sleep(1000);
} else {
printl("✗ 重试后仍未找到目标1");
}
}
var detects2 = opencv.findImagesEx('图色781849.cv');
if (detects2 != null && detects2.length > 0) {
printl("✓ 找到目标2,数量: " + detects2.length);
var rect2 = detects2[0].getRect();
printl("目标2中心点: x=" + rect2.getCenterX() + ", y=" + rect2.getCenterY());
printl("点击目标2");
detects2[0].clickRandom();
sleep(1000);
} else {
printl("✗ 未找到目标2");
}
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法二:findImages - 多图查找(支持超时和质量设置)
function example2_findImages() {
printl("【示例2】findImages - 多图查找");
printl("适用场景:同时查找多张相似图片,支持设置超时和截图质量");
try {
var targetImages = ['图色769598.cv', '图色769599.cv'];
var multiFindResults = opencv.findImages(targetImages, 0.7, 3000, 1, [0, 0, 1, 1]);
if (multiFindResults != null) {
printl("多图查找成功,找到目标数量: " + multiFindResults.length);
for (var i = 0; i < Math.min(3, multiFindResults.length); i++) {
printl("目标" + i + ": x=" + multiFindResults[i].x + ", y=" + multiFindResults[i].y);
}
if (multiFindResults.length > 0) {
printl("点击第一个目标");
multiFindResults[0].clickRandom();
}
} else {
printl("多图查找超时或失败");
}
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法三:templateMatch - 多模板匹配查找目标对象
function example3_templateMatch() {
printl("【示例3】templateMatch - 多模板匹配查找");
printl("适用场景:基于多个模板图片在指定图像中匹配目标,可设置匹配区域、阈值等");
try {
var image = screen.screenShotFull();
var mat = image.getMat();
var templates = ['图色769598.cv', '图色769599.cv'];
var matchResults = opencv.templateMatch(mat, templates, 0.8, [0, 0, 1, 1], false);
if (matchResults != null && matchResults.length > 0) {
printl("模板匹配成功,找到目标数量: " + matchResults.length);
for (var i = 0; i < Math.min(3, matchResults.length); i++) {
printl("目标" + i + ": x=" + matchResults[i].x + ", y=" + matchResults[i].y +
", width=" + matchResults[i].width + ", height=" + matchResults[i].height);
}
printl("点击第一个目标");
matchResults[0].clickRandom();
} else {
printl("模板匹配未找到目标");
}
mat.close();
image.close();
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法四:findImagesEx - 单CV文件查找多个目标
function example4_findImagesEx_multi() {
printl("【示例4】findImagesEx - 单CV文件查找多个目标");
printl("适用场景:屏幕中存在多个相同的目标,需要全部找到");
printl("注意:此示例在示例1执行后运行,屏幕状态可能已改变");
try {
var detects = opencv.findImagesEx('图色769598.cv');
if (detects != null && detects.length > 0) {
printl("找到 " + detects.length + " 个目标");
for (var i = 0; i < detects.length; i++) {
var rect = detects[i].getRect();
printl("目标" + i + ": 中心点 x=" + rect.getCenterX() + ", y=" + rect.getCenterY());
}
printl("点击所有目标");
for (var i = 0; i < detects.length; i++) {
detects[i].clickRandom();
sleep(500);
}
} else {
printl("未找到目标");
}
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法五:findImages - 指定区域找图
function example5_findImages_region() {
printl("【示例5】findImages - 指定区域找图");
printl("适用场景:只在屏幕的特定区域查找目标,提高查找效率");
try {
var targetImages = ['图色769598.cv'];
var region = [0.2, 0.2, 0.8, 0.8];
printl("查找区域: [" + region.join(", ") + "]");
printl("说明:区域坐标为百分比,[0.2, 0.2, 0.8, 0.8] 表示从屏幕20%位置开始查找");
var regionResults = opencv.findImages(targetImages, 0.7, 3000, 1, region);
if (regionResults != null) {
printl("在指定区域内找到 " + regionResults.length + " 个目标");
if (regionResults.length > 0) {
regionResults[0].clickRandom();
}
} else {
printl("指定区域内未找到目标");
}
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法六:findImages - 带超时的找图
function example6_findImages_timeout() {
printl("【示例6】findImages - 带超时的找图");
printl("适用场景:设置查找超时时间,避免长时间等待");
try {
var targetImages = ['图色769598.cv'];
printl("开始查找,超时时间: 5000毫秒");
printl("说明:如果5000毫秒内未找到目标,将返回null");
var timeoutResults = opencv.findImages(targetImages, 0.7, 5000, 1, [0, 0, 1, 1]);
if (timeoutResults != null) {
printl("在超时前找到目标");
timeoutResults[0].clickRandom();
} else {
printl("查找超时,未找到目标");
}
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法七:templateMatch - 只返回最佳匹配
function example7_templateMatch_best() {
printl("【示例7】templateMatch - 只返回最佳匹配");
printl("适用场景:只关心最匹配的结果,忽略其他匹配项");
try {
var image = screen.screenShotFull();
var mat = image.getMat();
var templates = ['图色769598.cv', '图色769599.cv'];
printl("查找最佳匹配(best=true)");
printl("说明:只返回相似度最高的一个匹配结果");
var bestMatch = opencv.templateMatch(mat, templates, 0.8, [0, 0, 1, 1], true);
if (bestMatch != null && bestMatch.length > 0) {
printl("找到最佳匹配: x=" + bestMatch[0].x + ", y=" + bestMatch[0].y);
bestMatch[0].clickRandom();
} else {
printl("未找到最佳匹配");
}
mat.close();
image.close();
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法八:findImages - 不同截图质量的找图
function example8_findImages_quality() {
printl("【示例8】findImages - 不同截图质量的找图");
printl("适用场景:根据需求选择不同的截图质量,平衡速度和准确度");
try {
var targetImages = ['图色769598.cv'];
printl("测试不同截图质量:");
printl("质量0(标清):速度快,适合快速查找");
var result0 = opencv.findImages(targetImages, 0.7, 3000, 0, [0, 0, 1, 1]);
printl(" 标清结果: " + (result0 != null ? "找到" : "未找到"));
printl("质量1(高清):速度中等,适合一般场景");
var result1 = opencv.findImages(targetImages, 0.7, 3000, 1, [0, 0, 1, 1]);
printl(" 高清结果: " + (result1 != null ? "找到" : "未找到"));
printl("质量2(超清):速度慢,适合精细查找");
var result2 = opencv.findImages(targetImages, 0.7, 3000, 2, [0, 0, 1, 1]);
printl(" 超清结果: " + (result2 != null ? "找到" : "未找到"));
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法九:templateMatch - 指定区域的模板匹配
function example9_templateMatch_region() {
printl("【示例9】templateMatch - 指定区域的模板匹配");
printl("适用场景:在屏幕的特定区域内进行模板匹配");
try {
var image = screen.screenShotFull();
var mat = image.getMat();
var templates = ['图色769598.cv'];
var region = [0.3, 0.3, 0.7, 0.7];
printl("在区域 [" + region.join(", ") + "] 内进行模板匹配");
printl("说明:只在屏幕中央区域查找,提高效率");
var matchResults = opencv.templateMatch(mat, templates, 0.8, region, false);
if (matchResults != null && matchResults.length > 0) {
printl("在指定区域内找到 " + matchResults.length + " 个目标");
matchResults[0].clickRandom();
} else {
printl("指定区域内未找到目标");
}
mat.close();
image.close();
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法十:findImages - 不同相似度阈值的找图
function example10_findImages_threshold() {
printl("【示例10】findImages - 不同相似度阈值的找图");
printl("适用场景:根据需求调整相似度阈值,平衡精确度和召回率");
try {
var targetImages = ['图色769598.cv'];
printl("测试不同相似度阈值:");
printl("阈值0.5(宽松):容易找到,但可能误匹配");
var result05 = opencv.findImages(targetImages, 0.5, 3000, 1, [0, 0, 1, 1]);
printl(" 阈值0.5结果: " + (result05 != null ? result05.length + "个" : "未找到"));
printl("阈值0.7(中等):平衡精确度和召回率");
var result07 = opencv.findImages(targetImages, 0.7, 3000, 1, [0, 0, 1, 1]);
printl(" 阈值0.7结果: " + (result07 != null ? result07.length + "个" : "未找到"));
printl("阈值0.9(严格):只匹配非常相似的目标");
var result09 = opencv.findImages(targetImages, 0.9, 3000, 1, [0, 0, 1, 1]);
printl(" 阈值0.9结果: " + (result09 != null ? result09.length + "个" : "未找到"));
} catch (e) {
printl("错误: " + e);
}
printl("");
}
// 方法十一:综合自动化流程 - 完整的自动化操作流程(实战案例)
function example11_comprehensive_flow() {
printl("【示例11】综合自动化流程 - 实战案例");
printl("适用场景:完整的自动化操作流程,模拟实际应用");
try {
printl("========== 步骤1: 使用findImagesEx查找第一个目标 ==========");
var detects1 = opencv.findImagesEx('图色769598.cv');
if (detects1 != null && detects1.length > 0) {
printl("✓ 找到目标1,点击");
printl(" 位置: x=" + detects1[0].x + ", y=" + detects1[0].y);
detects1[0].clickRandom();
sleep(2000);
printl("\n========== 步骤2: 使用findImages查找多个目标 ==========");
var targetImages = ['图色769598.cv', '图色769599.cv'];
printl("查找图片列表: " + targetImages.join(", "));
var multiResults = opencv.findImages(targetImages, 0.7, 3000, 1, [0, 0, 1, 1]);
if (multiResults != null) {
printl("✓ 找到 " + multiResults.length + " 个目标");
if (multiResults.length > 0) {
printl("✓ 点击第一个目标");
multiResults[0].clickRandom();
sleep(2000);
}
printl("\n========== 步骤3: 使用templateMatch在指定区域查找 ==========");
var image = screen.screenShotFull();
var mat = image.getMat();
var templates = ['图色769598.cv'];
var region = [0.3, 0.3, 0.7, 0.7];
printl("在区域 [" + region.join(", ") + "] 内查找");
printl("说明:只在屏幕中央区域查找,提高效率");
var matchResults = opencv.templateMatch(mat, templates, 0.8, region, true);
if (matchResults != null && matchResults.length > 0) {
printl("✓ 在指定区域内找到目标");
printl(" 位置: x=" + matchResults[0].x + ", y=" + matchResults[0].y);
matchResults[0].clickRandom();
} else {
printl("✗ 指定区域内未找到目标");
}
mat.close();
image.close();
printl("\n========== 步骤4: 查找所有相同目标并批量点击 ==========");
var allDetects = opencv.findImagesEx('图色769598.cv');
if (allDetects != null && allDetects.length > 0) {
printl("✓ 找到 " + allDetects.length + " 个相同目标");
printl("开始批量点击...");
for (var i = 0; i < allDetects.length; i++) {
printl(" 点击目标 " + (i + 1) + "/" + allDetects.length);
allDetects[i].clickRandom();
sleep(300);
}
printl("✓ 批量点击完成");
} else {
printl("✗ 未找到目标");
}
} else {
printl("✗ 多图查找失败");
}
} else {
printl("✗ 未找到目标1");
}
printl("\n========== 综合流程执行完成 ==========");
} catch (e) {
printl("综合流程错误: " + e);
}
printl("");
}
// ========== 实用辅助函数集合 ==========
// 辅助函数1:安全找图(带重试机制)
function safeFindImage(cvFile, maxRetries) {
printl("【辅助函数】safeFindImage - 安全找图(带重试机制)");
for (var retry = 0; retry < maxRetries; retry++) {
try {
printl("查找图片: " + cvFile + " (尝试 " + (retry + 1) + "/" + maxRetries + ")");
var detects = opencv.findImagesEx(cvFile);
if (detects != null && detects.length > 0) {
printl("✓ 找到目标");
return detects;
}
if (retry < maxRetries - 1) {
printl("未找到,等待重试...");
sleep(1000);
}
} catch (error) {
printl("查找出错: " + error);
if (retry < maxRetries - 1) {
sleep(2000);
}
}
}
printl("✗ 未找到图片: " + cvFile);
return null;
}
// 辅助函数2:批量点击所有匹配目标
function clickAllTargets(detects) {
printl("【辅助函数】clickAllTargets - 批量点击所有匹配目标");
if (detects == null || detects.length === 0) {
printl("没有可点击的目标");
return;
}
printl("准备点击 " + detects.length + " 个目标");
for (var i = 0; i < detects.length; i++) {
printl("点击目标 " + (i + 1) + ": x=" + detects[i].x + ", y=" + detects[i].y);
detects[i].clickRandom();
sleep(300);
}
printl("✓ 所有目标点击完成");
}
// 辅助函数3:获取目标中心点
function getTargetCenter(detect) {
printl("【辅助函数】getTargetCenter - 获取目标中心点");
if (detect == null) {
return null;
}
var center = {
x: detect.x + detect.width / 2,
y: detect.y + detect.height / 2
};
printl("目标中心点: x=" + center.x + ", y=" + center.y);
return center;
}
// 辅助函数4:判断目标是否在指定区域内
function isTargetInRegion(detect, region) {
printl("【辅助函数】isTargetInRegion - 判断目标是否在指定区域内");
if (detect == null) {
return false;
}
var centerX = detect.x + detect.width / 2;
var centerY = detect.y + detect.height / 2;
var inRegion = centerX >= region[0] && centerX <= region[2] &&
centerY >= region[1] && centerY <= region[3];
printl("目标中心点(" + centerX + ", " + centerY + ") " +
(inRegion ? "在" : "不在") + "区域内");
return inRegion;
}
// 辅助函数5:查找并点击最接近指定坐标的目标
function findAndClickNearestTarget(cvFile, targetX, targetY) {
printl("【辅助函数】findAndClickNearestTarget - 查找并点击最接近指定坐标的目标");
try {
var detects = opencv.findImagesEx(cvFile);
if (detects == null || detects.length === 0) {
printl("未找到目标");
return false;
}
var nearestIndex = 0;
var minDistance = Number.MAX_VALUE;
for (var i = 0; i < detects.length; i++) {
var centerX = detects[i].x + detects[i].width / 2;
var centerY = detects[i].y + detects[i].height / 2;
var distance = Math.sqrt(Math.pow(centerX - targetX, 2) + Math.pow(centerY - targetY, 2));
if (distance < minDistance) {
minDistance = distance;
nearestIndex = i;
}
}
printl("找到最近的目标,距离: " + minDistance.toFixed(2));
detects[nearestIndex].clickRandom();
return true;
} catch (e) {
printl("错误: " + e);
return false;
}
}
// 辅助函数6:查找并点击最相似的目标
function findAndClickBestMatch(cvFile, threshold) {
printl("【辅助函数】findAndClickBestMatch - 查找并点击最相似的目标");
try {
var detects = opencv.findImagesEx(cvFile);
if (detects == null || detects.length === 0) {
printl("未找到目标");
return false;
}
printl("找到 " + detects.length + " 个目标");
printl("点击第一个目标(通常是最相似的)");
detects[0].clickRandom();
return true;
} catch (e) {
printl("错误: " + e);
return false;
}
}
// 辅助函数7:等待目标出现并点击
function waitForTargetAndClick(cvFile, maxWaitTime) {
printl("【辅助函数】waitForTargetAndClick - 等待目标出现并点击");
printl("最大等待时间: " + maxWaitTime + "毫秒");
var startTime = Date.now();
while (Date.now() - startTime < maxWaitTime) {
try {
var detects = opencv.findImagesEx(cvFile);
if (detects != null && detects.length > 0) {
printl("✓ 目标已出现,点击");
detects[0].clickRandom();
return true;
}
sleep(500);
} catch (e) {
printl("查找出错: " + e);
}
}
printl("✗ 超时,目标未出现");
return false;
}
// ========== 方法使用建议 ==========
function printUsageTips() {
printl("========== 找图方法使用建议 ==========");
printl("");
printl("1. 方法选择建议:");
printl(" - 单图找图 → opencv.findImagesEx(最简单直接)");
printl(" - 多图查找 → opencv.findImages(支持超时和质量设置)");
printl(" - 自定义匹配 → opencv.templateMatch(最灵活)");
printl("");
printl("2. 性能优化建议:");
printl(" - 提高相似度阈值(如0.8-0.9)可减少误匹配");
printl(" - 使用区域参数限定查找范围可提高速度");
printl(" - 设置合理的超时时间避免长时间等待");
printl(" - 根据需求选择合适的截图质量(0/1/2)");
printl("");
printl("3. 资源管理建议:");
printl(" - 使用templateMatch时记得调用mat.close()和image.close()");
printl(" - 避免在循环中频繁截图,可使用OCR.lockOCR()锁定缓存");
printl("");
printl("4. 实战技巧:");
printl(" - 使用safeFindImage()实现带重试的找图");
printl(" - 使用clickAllTargets()批量点击所有目标");
printl(" - 使用waitForTargetAndClick()等待目标出现");
printl(" - 使用findAndClickNearestTarget()点击最近的目标");
printl("");
printl("========== 使用建议结束 ==========");
}
// 运行主函数
main();
// 打印使用建议
printUsageTips();
复制代码
欢迎光临 B2B网络软件 (http://bbs.niubt.cn/)
Powered by Discuz! X3.2