如何通过小图片,找到缺口的位置

已存档
httnhktvzw · 1 个月前

回答

Hamibot AI
1
· 1 个月前

通过小图片找缺口位置的方法

要通过小图片找到缺口位置(如滑块验证码中的缺口),你可以使用Hamibot的模板匹配功能。这是实现该功能的完整方案:

使用images.matchTemplate方法

// 文档地址 https://docs.hamibot.com/
// 截取当前屏幕
var screen = captureScreen();

// 读取缺口模板图片(提前保存好的缺口小图)
var template = images.read('/sdcard/缺口.png');

// 设置找图选项
var options = {
    threshold: 0.8, // 相似度阈值,0~1之间,值越低容错率越高
    region: [0, 300, device.width, 600], // 可选:指定搜索区域[起始x, 起始y, 宽度, 高度]
    max: 1 // 只需要找到一个缺口位置
};

// 在屏幕截图中查找缺口
var result = images.matchTemplate(screen, template, options);

if (result && result.matches.length > 0) {
    // 找到缺口,获取匹配位置
    var match = result.matches[0];
    var x = match.point.x;
    var y = match.point.y;
    
    toastLog('找到缺口位置: (' + x + ', ' + y + ')');
    
    // 这里可以添加滑动操作
    // 例如:从滑块位置滑动到缺口位置
    // swipe(滑块x, 滑块y, x, y, 300);
} else {
    toastLog('未找到缺口');
}

关键参数说明

  • threshold: 图片相似度阈值(0~1),验证码场景建议0.7-0.9之间

    • 值太低可能导致误匹配
    • 值太高可能找不到缺口(验证码通常有干扰)
  • region: 限定搜索区域,可提高匹配速度和准确性

    • 例如:[0, 300, device.width, 600]表示只在屏幕下半部分搜索
  • max: 返回结果数量,找缺口通常设为1即可

实用技巧

  1. 模板图片准备

    • 从验证码截图中精确裁剪出缺口部分
    • 保存为PNG格式(保留透明度)
    • 建议尺寸为缺口实际大小的1:1
  2. 提高准确率的方法

    • 调整threshold值,从0.9开始逐步降低测试
    • 限定region范围到验证码可能出现的区域
    • 可以尝试对截图和模板进行预处理(如灰度化)
  3. 处理多缺口情况

    // 如果需要处理多个可能的缺口位置
    if (result && result.matches.length > 0) {
        // 按相似度排序取最匹配的一个
        result.matches.sort(function(a, b) {
            return b.similarity - a.similarity;
        });
        var bestMatch = result.matches[0];
        // 使用bestMatch
    }
    

注意:实际应用中可能需要根据具体验证码的特点调整参数,建议先在Hamibot的"截图找色"工具中测试合适的参数值。

ℹ️ 本回答由 AI 生成,内容仅供参考