在 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的主要内容,如果未能解决你的问题,请参考以下文章