示例:
如图所示,当我想要匹配 “同意” 字样的按钮时,因为还有一个小字的非按钮 “同意”,也会被匹配到
此时我们能够得到两个左边,但是无法区分那个是我想要点击的按钮
代码如下:
使用的方法是 flann
第一个方法可行,就是稍微麻烦点,对一些特殊的图需要单独做判断
第二个方法看起来是可以做成统一的限制,但是置信度是什么值?参数名称是什么?我用的是 sift.detectAndCompute 来提取描述子
请指教!
单独处理比较麻烦,可以把判断的部分做成参数,比如加个 side 参数,target = driver.sift_detect(source, side="left"),这样去调用就只判断屏幕左半部分的内容,右边的过滤掉,side 就由自己去设计了,上下左右,居中什么的都可以。
置信度就是相似度,你用来判断两个物体是否相似的阈值,查出来的结果是一个列表,通过相似度排序后取最大,这样虽然不 100% 准确,但是大多数情况下有效。
1.传参也不通用,我这里的场景是遍历一堆图片去和当时的截图一一做匹配,究竟哪一张点击靠左还是靠右是不确定的,所以还是要单独处理
2.置信度我之前用模式匹配是有这个参数的,但是它的弊端是不同分辨率图片不能匹配,现在用 sift 的特征点匹配,查了下好像是没有置信度这个参数的
我觉得啊 既然你都知道界面啥样子了,两个特征点你都能拿到,返回值里面对应的哪个你不是应该很清楚吗,就好比控件识别时候的相同属性的控件,你肯定看到页面之后,知道自己需要点击哪个控件吧,既然这样在获取的控件列表上加个索引不就好了吗?
我需要做到的是尽可能通用,这一张图就有很多种情况
在不同的手机上
1.可能会精确匹配同意按钮,有且仅有一个坐标
2.问题中的现象匹配到两个坐标,排序第二个是我要的
3.还会有图中现象在另外的手机上,还是这两个点,因为手机型号不同所以变成了第一个是我要的
手机数量是庞大的,我没办法确定哪个手机是哪一种情况
1.knnMatch 更全面的数据展示方式我还得查查,我也觉得改与类似置信度的数据
2.模板匹配用的是 matchTemplate,resize 模板图片的方法使用过了,按照分辨率的缩放比例去缩放模板图片后,缩放后的模板图在目标图内还是完全查找不到
我 resize 采用的是,模板图 w* 模板图原始分辨率 w/目标图 w
很抱歉,以前用不上特征匹配,对 opencv 特征匹配这块的内容不熟,所以上面的回答有一些误导,今晚重新看了下文档,再回答一下。
特征点提取出来后,用模版匹配再算一次
airtest 的用上了,匹配准确度用起来还是稍微有些瑕疵,基本还算能用