在 OpenCV 中与屏幕捕获一起使用的函数 matchTemplate

Posted

技术标签:

【中文标题】在 OpenCV 中与屏幕捕获一起使用的函数 matchTemplate【英文标题】:Function matchTemplate used with screen capture in OpenCV 【发布时间】:2020-05-15 11:46:05 【问题描述】:

我想使用名为matchTemplate 的OpenCV 函数将模板图片与我当前的屏幕相匹配。我当前的屏幕和模板图片保存在文件中。我正在使用下面的代码将我的模板与屏幕匹配:

Mat screen = imread("screen.bmp", IMREAD_COLOR);
Mat template = imread("template.png", IMREAD_COLOR);
int cols = screen.cols - template.cols + 1;
int rows = screen.rows - template.rows + 1;
Mat result(rows , cols , CV_8UC3);
matchTemplate(screen, template, result, TM_SQDIFF_NORMED);
double min;
minMaxLoc(result, &min, nullptr, nullptr);

发现min的值在模板真正匹配到屏幕时大约等于0.003,但有时当模板不匹配到屏幕时它也等于大约0.0045(当我使用另一个时会发生这种情况)类似屏幕的图片)。

我想了解一个解决方案,它可能是一个可以更精确地检查它的特殊功能。我的模板图片 (template.png) 只是主屏幕 (screen.bmp) 的裁剪图片,因此最好的解决方案是一个可以逐像素匹配的 OpenCV 函数,可能偏差很小。我想完美匹配它而不是寻找相似之处。

【问题讨论】:

【参考方案1】:

来自tutorial page,

对于前两种方法(CV_SQDIFF 和 CV_SQDIFF_NORMED),最佳匹配是最低值。对于所有其他人来说,更高的值代表更好的匹配。

他们的documentation也提到了这一点。

【讨论】:

那么什么值最适合逐像素比较? 我不确定你在问什么。这就是模板匹配的作用。生成的矩阵是基于每个匹配像素的匹配分数。

以上是关于在 OpenCV 中与屏幕捕获一起使用的函数 matchTemplate的主要内容,如果未能解决你的问题,请参考以下文章

OPENCV 桌面捕获第二部分

视频捕获期间显示灰屏 - OpenCV

在android中与相机捕获的图像叠加图像

opencv 桌面捕获在大字体模式下仅返回窗口上的部分屏幕

花哨的盒子在 beforeShow 函数中与 iframe 一起使用?

如何在查询中与工人及其旁边的经理一起编写查询