模板不在原图上时的模板匹配结果

Posted

技术标签:

【中文标题】模板不在原图上时的模板匹配结果【英文标题】:Template matching results when the template is not on the original image 【发布时间】:2014-11-19 16:37:15 【问题描述】:

出于测试目的,我正在构建一个点击屏幕上按钮的机器人。我有一个文件夹,其中包含所有可能需要按下的按钮,并且正在测试的应用程序一次只显示一个按钮。不会出现两个或多个按钮同时出现在屏幕上的情况。

我的方法是每隔几秒钟截取一次屏幕截图,然后遍历所有可能的按钮,然后尝试在屏幕截图上找到它们。如果找到按钮,机器人会点击按钮的中心。

我的问题是,即使屏幕截图上没有按钮,我使用的模板算法也会在屏幕的某处返回误报。有什么方法可以确保不返回误报,除非图片上存在按钮?

我正在使用带有 numpy 和 skimage 的 python。对于模板匹配,我使用的是 skimage.feature.match_template。

我已经尝试过使用 SIFT 的 opencv 以及所有那些没有太大成功且 opencv 本身存在很多问题的方法。

P.S.:如果您认为有更好的方法来解决问题本身(通过按下按钮测试应用程序),也欢迎他们。

干杯

编辑 1:

这些是图片:

编辑 2:

脚本的输出(误报)

【问题讨论】:

能否请您添加示例图片,尤其是误报 @canberk 刚刚添加了它们。还添加了我的脚本的输出和误报。 我现在尝试的想法是将按钮图像与屏幕截图中的可疑区域进行比较并计算曼哈顿范数,如果图像差异太大,则得分会高低很相似。这样我也许能够检测到误报。 【参考方案1】:

我后来意识到,确保检测到的图像确实是您正在搜索的图像的唯一方法是计算检测到的图像与模板之间的差异,并使用阈值来允许缺陷。

【讨论】:

以上是关于模板不在原图上时的模板匹配结果的主要内容,如果未能解决你的问题,请参考以下文章

opencv 模板匹配,在图像中寻找物体

OpenCV探索之路:模板匹配

模板匹配

Opencv模板匹配

OpenCV基础之模板匹配与直方图

OpenCV(项目)车牌识别3 -- 模板匹配