首页 > 解决方案 > 如何在多个图像中找到一个模板?

问题描述

我有一个模板和几张图片。所以问题是找出图像中是否有这个模板。我写了一些循环,但我认为它不会返回布尔值......

    for i in images:
        res = cv2.matchTemplate(i,templateDealer,cv2.TM_CCOEFF_NORMED)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
        top_left = max_loc
        bottom_right = (top_left[0] + w, top_left[1] + h)
        cv2.rectangle(i, top_left, bottom_right, (0, 255, 0), 2)
        result.append(res)

请帮我完成它...

标签: pythonopencv

解决方案


matchTemplate返回一个 2D 数组,其中包含每个像素位置的匹配值 - 模板与该位置的匹配程度。
cv2.minMaxLoc(res)返回图像中最佳匹配的值和位置。当您在视觉上比较它时,它可能不是真正的匹配,但它是算法返回的最高值。您可以在多张图像上比较这个最高值,总体最高的是您要寻找的那个。
注意:您不应该为此使用归一化算法,请使用cv2.TM_CCOEFF而不是cv2.TM_CCOEFF_NORMED

您需要做的是附加一个包含最高值的元组及其位置:
result.append((max_val, max_loc))
处理完所有图像后,找到最高的 max_val,并使用它的 max_loc 绘制一个矩形


推荐阅读