如何使用OpenCV MatchTemplate?
computer-vision
image-processing
opencv
python
7
0

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

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存储“比较结果图”。我尝试打印它,但是它给了我宽度,高度和台阶。

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

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

这可能对您有用! :)

def FindSubImage(im1, im2):
    needle = cv2.imread(im1)
    haystack = cv2.imread(im2)

    result = cv2.matchTemplate(needle,haystack,cv2.TM_CCOEFF_NORMED)
    y,x = np.unravel_index(result.argmax(), result.shape)
    return x,y

CCOEFF_NORMED只是众多比较方法之一。有关完整列表,请参见: http : //docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

不知道这是否是最好的方法,但是速度很快,对我来说效果很好! :)

收藏
评论

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

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

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

然后minLoc具有最佳匹配的位置, minVal描述了模板适合的程度。您需要为minVal设定一个阈值,以确定您是否将此结果视为匹配项。

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号