【问题标题】:Function matchTemplate used with screen capture in OpenCV在 OpenCV 中与屏幕捕获一起使用的函数 matchTemplate
【发布时间】: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 函数,可能偏差很小。我想完美匹配它而不是寻找相似之处。

【问题讨论】:

    标签: c++ opencv matchtemplate


    【解决方案1】:

    来自tutorial page

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

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

    【讨论】:

    • 那么什么值最适合逐像素比较?
    • 我不确定你在问什么。这就是模板匹配的作用。生成的矩阵是基于每个匹配像素的匹配分数。
    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2021-04-27
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2012-03-31
    相关资源
    最近更新 更多