1

我正在尝试制作一个自动化工具,并且正在尝试一种录制屏幕截图并记录用户输入的录制类型。这个想法是让用户拍摄快照并在“提交”按钮的快照上突出显示一个正方形。在播放过程中,程序会对打开的窗口进行截图,并通过搜索截图找到按钮的坐标。所以我需要一种算法来搜索图像以获得按钮的精确(或非常接近)图像。到目前为止,我发现的算法比较图像相似度,但无法在子图像中找到它,考虑到我试图找到的“对象”将是近乎完美的匹配,对象识别算法似乎有点过头了。有任何想法吗?

4

3 回答 3

2

以下工具可以帮助您:

于 2014-11-10T12:19:50.163 回答
1
  1. 在按钮图像中找到明显的特征

    例如,可以使用与按钮面颜色相邻的边缘颜色或方形子图像的推导、形状或平均颜色(8x8 像素 ...)

  2. 在快照中搜索此功能

    我会使用平均颜色作为开始,因此将图像划分为N x N像素区域并计算它们的平均颜色。如果您发现方形的平均颜色与按钮的平均颜色相似,那么您就有可能的位置。

  3. 在此之后,如果有按钮,您可以蛮力攻击附近区域

    在这个阶段不要直接比较你的颜色(可以通过抗锯齿和过滤器扭曲......)。更好的方法是比较推导的+/-一些准确性。您可以制作可能按钮存在的系数:

    p(x,y)=count(matching pixels) / (button pixels)
    

    如果它足够接近1.0那么你找到了你的按钮。

PS。在第 3 阶段,您可以使用灰度图像来简化事情

于 2013-11-13T09:33:56.860 回答
1

您需要的是一种有效的特征提取方法。这取决于您要查找的内容,但我们假设您要查找此图像中的“发送”按钮:

Web 表单的屏幕截图

此按钮的一个特点是它在顶部和底部包含一对平行线段。这同样适用于两个文本输入字段,但对于按钮,这个偏移量正好是 17 像素。

如果您计算源图像的最大像素值及其自身垂直移动 17 个像素,这就是您得到的结果:

17像素垂直移位和最大值计算的结果

发送按钮现在显示为水平实线。通过对图像进行阈值处理并寻找完整的黑色像素序列,您可以很容易地检测到这一点。仅供参考,以下是我在应用 10px 水平运动模糊并以 128 灰度级进行阈值处理后获得的结果:

在此处输入图像描述

此过程将很快确定候选职位。然后,您可以对这些位置使用更强大的技术,例如 2D 卷积和OCR,而不会损失太多性能。

于 2013-11-13T10:19:08.353 回答