如何使用OpenCV MatchTemplate?

发布于 2021-01-29 18:07:19

我正在尝试在另一个图像中查找图像。

im = cv.LoadImage('1.png', cv.CV_LOAD_IMAGE_UNCHANGED)
    tmp = cv.LoadImage('e1.png', cv.CV_LOAD_IMAGE_UNCHANGED)
    w,h = cv.GetSize(im)
    W,H = cv.GetSize(tmp)
    width = w-W+1
    height = h-H+1
    result = cv.CreateImage((width, height), 32, 1)
    cv.MatchTemplate(im, tmp, result, cv.CV_TM_SQDIFF)
    print result

当我运行此命令时,一切正常执行,不会引发任何错误。但是我不确定从这里做什么。该文档说result存储“比较结果图”。我尝试打印它,但是它给了我宽度,高度和台阶。

如何使用此信息查找一个图像是否在另一个图像中/位于该图像中?

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    MatchTemplate返回相似度图,而不是位置。然后,您可以使用此地图查找位置。

    如果您只寻找一个匹配项,则可以执行以下操作来获取位置:

    minVal,maxVal,minLoc,maxLoc = cv.MinMaxLoc(result)
    

    然后找到minLoc最匹配的位置,并minVal描述模板的适合程度。您需要提出一个阈值,minVal以确定您是否认为此结果匹配。

    如果您要为每个图像寻找多个匹配项,则需要使用非最大压缩等算法。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看