我正在尝试制作一个自动化工具,并且正在尝试一种录制屏幕截图并记录用户输入的录制类型。这个想法是让用户拍摄快照并在“提交”按钮的快照上突出显示一个正方形。在播放过程中,程序会对打开的窗口进行截图,并通过搜索截图找到按钮的坐标。所以我需要一种算法来搜索图像以获得按钮的精确(或非常接近)图像。到目前为止,我发现的算法比较图像相似度,但无法在子图像中找到它,考虑到我试图找到的“对象”将是近乎完美的匹配,对象识别算法似乎有点过头了。有任何想法吗?
3 回答
以下工具可以帮助您:
- 预制件:http: //github.com/prefab
- 西库里:http ://www.sikuli.org
在按钮图像中找到明显的特征
例如,可以使用与按钮面颜色相邻的边缘颜色或方形子图像的推导、形状或平均颜色(8x8 像素 ...)
在快照中搜索此功能
我会使用平均颜色作为开始,因此将图像划分为
N x N
像素区域并计算它们的平均颜色。如果您发现方形的平均颜色与按钮的平均颜色相似,那么您就有可能的位置。在此之后,如果有按钮,您可以蛮力攻击附近区域
在这个阶段不要直接比较你的颜色(可以通过抗锯齿和过滤器扭曲......)。更好的方法是比较推导的
+/-
一些准确性。您可以制作可能按钮存在的系数:p(x,y)=count(matching pixels) / (button pixels)
如果它足够接近
1.0
那么你找到了你的按钮。
PS。在第 3 阶段,您可以使用灰度图像来简化事情
您需要的是一种有效的特征提取方法。这取决于您要查找的内容,但我们假设您要查找此图像中的“发送”按钮:
此按钮的一个特点是它在顶部和底部包含一对平行线段。这同样适用于两个文本输入字段,但对于按钮,这个偏移量正好是 17 像素。
如果您计算源图像的最大像素值及其自身垂直移动 17 个像素,这就是您得到的结果:
发送按钮现在显示为水平实线。通过对图像进行阈值处理并寻找完整的黑色像素序列,您可以很容易地检测到这一点。仅供参考,以下是我在应用 10px 水平运动模糊并以 128 灰度级进行阈值处理后获得的结果:
此过程将很快确定候选职位。然后,您可以对这些位置使用更强大的技术,例如 2D 卷积和OCR,而不会损失太多性能。