正如 HansHire 所提到的,official documentation 在窗口滑动时提供了用于像素求和的公式。此外,Python OpenCV docs 显示示例:
TM_CCOEFF
TM_CCORR
请注意文档说:
您可以看到使用 cv2.TM_CCORR 的结果并不像我们预期的那样好。
如果您想使用始终保持不变的屏幕截图或图像部分(a-la Sikuli)(不是照明/变换可以改变的真实世界的相机帧),请使用matchTemplate,否则尽量避免它。它仅适用于特定用例,并且在实际结果方面不同的求和函数之间没有太大差异。
要解决您对缩写 TM_CCORR 和 TM_CCOEFF 代表什么的评论?:
100% 我真的不知道,但这不会阻止我猜测 :)))
我的直觉是,基于文档公式,TM_CCORR 是模板和图像之间的直接(“最简单”)关联:
结果像素是模板像素与模板中每个像素的图像像素之间的点积之和。
当模板“滑动”通过图像时,计算结果图像。
TM_CCOEFF 但不是当前模板像素 (T),而是使用更复杂的“系数”(T') (T(x′,y′)−1/(w⋅h)⋅∑x″,y″T(x″,y″))(类似地(I' 使用)。
我对数学符号的理解非常有限,但据我所知,CORR 版本与COEFF 不同,它考虑了模板和图像的尺寸以及总和像素强度。
唯一支持的其他方法是TM_SQDIFF,顾名思义,公式确认使用模板和图像像素强度之间的平方距离。
这 3 种主要方法中的每一种都有标准版本。
好的,这就是我对缩写含义的看法(例如,直接(点积)相关性与更复杂(没有双关语)的相关性)
但这意味着什么?
实际上,我主要关注的是TM_CCORR 和TM_CCOEFF 最有可能匹配最亮的像素,而TM_SQDIFF 则相反:最暗的值可能匹配(请参阅链接的示例图像)。
我会从TM_CCOEFF 开始,然后如果当前图像的结果没有返回一致的结果,请修改参数,但如前所述,我只会将其用于非常非常受控条件。
对于不是屏幕截图或模板的实时数据,它们是同一图像的一部分(a-la “Waldo 在哪里”),我会研究对象检测(例如,使用 HOG 作为特征描述符训练 SVM)