美文网首页
autojs查找透明图

autojs查找透明图

作者: 牙叔教程 | 来源:发表于2021-07-25 23:30 被阅读0次

    牙叔教程 简单易懂

    使用场景

    查找图片中的透明按钮的位置

    效果展示

    透明按钮是齿轮按钮和双人按钮,

    黄色矩形是找出来的位置


    41tmp.png 1tmp.png 2tmp.png 3tmp.png

    autojs版本

    8.8.20-0

    原理

    观察图片, 可以明显的看到, 按钮的亮度是比周围高得多, 所以我们可以查找图片中最亮的部分,

    找到的大概率就是我们要找的东西;

    解决问题, 实事求是, 不同的需求, 不同的场景, 采用合适的方法;

    如果此处的按钮, 明度不明显的话, 我们就要观察图片, 找出我们可以利用的特征,

    比如颜色, 面积, 形状

    本教程使用的二值化, 来提取图片的轮廓,

    有兴趣的话, 大家可以试试边缘检测, 提取出来的轮廓

    边缘检测, 效果如下:


    边缘检测.png

    步骤

    1. 灰度
    2. 二值化
    3. 抠图
    4. 模板匹配

    二值化的可视化

    为了找到合适的二值化阈值, 需要经过多次测试, 所以专门写了一个滑块来调整阈值,

    经过多次测试, 这几张图片的最佳阈值在175


    二值化.png

    提高找图效率

    找图我测试, 效率挺高的,

    我专门用console.time打印了代码的运行时长,

    脚本总时长: 2555ms

    保存文件两次, 时长分别为: 1131ms, 1104ms

    也就是说, 如果不保存文件, 那么实际上代码执行时间: 320ms

    另外, 如果找图的时候, 可以在不影响效果的情况下,

    可以对图片进行缩放, 图片越小, 找图效率越高,

    模板图片是越大越好, 这样滑窗的次数会少很多,

    滑动窗口的次数少了, 找图速度就快了

    模板图片的选择

    一开始我是把齿轮的全部都截图了下来, 但是有的图片二值化后找不到齿轮,

    然后我就截取了特征最明显的部分, 也就是相对的稳定的特征

    原来的齿轮


    齿轮.png

    特征稳定的齿轮局部


    小齿轮.png

    双人


    双人.png

    代码讲解

    1. 灰度二值化
    runtime.images.initOpenCvIfNeeded();
    importClass(org.opencv.core.Mat);
    importClass(org.opencv.core.CvType);
    
    let imgPath = "./res/4.jpg";
    imgPath = files.path(imgPath);
    let img = images.read(imgPath);
    let grayImg = images.grayscale(img);
    let threshold = 175;
    let thresholdImg = images.threshold(grayImg, threshold, 255);
    
    2, 抠图

    我直接用的ps抠图, 电脑自带的画图也一样可以,

    只要保证抠图能用, 用什么工具都可以

    3. 模板匹配
    let matchingResult = images.matchTemplate(thresholdImg, templateGray, {
      threshold: matchTemplateThreshold,
    });
    
    4. 画矩形
    canvas.drawRect(left, top, left + templateWidth, top + templateHeight, paint);
    

    声明

    部分内容来自网络
    本教程仅用于学习, 禁止用于其他用途

    相关文章

      网友评论

          本文标题:autojs查找透明图

          本文链接:https://www.haomeiwen.com/subject/uxhwmltx.html