【问题标题】:How to read the result for matchTemplate (OpenCV2 in python)如何读取 matchTemplate 的结果(python 中的 OpenCV2)
【发布时间】:2020-09-27 04:57:20
【问题描述】:

以下代码实际上是我立即打印出来的结果:

result = cv.matchTemplate(haystack_img, needle_img, cv.TM_SQDIFF_NORMED

图片大小:

  • haystack_img = 27x16
  • needle_img = 7x7

但是,我真的不明白这是什么意思。

【问题讨论】:

    标签: python opencv image-processing opencv-python template-matching


    【解决方案1】:

    输出为您提供 响应 图像,大小为 21 x 10,其中 7 x 7 needle_img 模板从左到右和从上到下滑过图像,其中每个 7 x提取与模板重合的7个窗口并计算相关性。请注意输出大小的减小。它比搜索图像小,因为假定模板完全适合图像。

    但是,您选择的指标是距离指标 (cv2.TM_SQDIFF_NORMED)。对于此响应图像中的每个元素,它会为您提供模板和每个窗口之间的差异。为您提供最小值的位置意味着如果您将模板的左上角放置在此位置,则这是模板与图像最匹配的位置。

    这里有一些代码将绘制一个边界框,其中模板在 haystack 图像中最匹配:

    result = cv2.matchTemplate(haystack_img, needle_img, cv.TM_SQDIFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    top_left = min_loc
    w, h = (7, 7)
    bottom_right = (top_left[0] + w, top_left[1] + h)
    img_to_show = haystack_img.copy()
    cv2.rectangle(img_to_show, top_left, bottom_right, 255, 2)
    cv2.imshow("Result", img_to_show)
    cv2.waitKey(0)
    

    运行模板匹配,然后使用cv2.minMaxLoc 查找最小值和最大值以及它们在图像中的位置。给定您正在使用的方法(距离),我们希望使用最小值的位置。 min_loc 将提供模板应该最匹配的左上角的列和行坐标。我们根据模板的尺寸创建右下角坐标,然后创建图像的新副本并在其上绘制一个白色矩形,显示您是最匹配的模板,然后在最后显示图像。

    【讨论】:

      【解决方案2】:

      感谢@rayryeng 的回复,再解释一下~

      结果:

      • 位置 (0,0) 的置信度为 0.05779364
      • 位置 (0,1) 的置信度为 0.03569747

      图片大小:

      • haystack_img = 27x16
      • needle_img = 7x7

      由于图像是按每个像素进行比较的,所以 X 和 Y 位置可以算作

      • X:27-7+1) = 21
      • Y:(16-7+1) = 10

      X:0, 1, 2, 3, ... ,21 = 每个列表中的位置 也等于

      len(result[0])
      

      [

      0.05779364
      0.06816062
      0.07974802
      0.09858147
      0.12885822
      0.16065261
      0.19880965
      0.28301606
      0.3753051
      0.47798595
      0.5469872
      0.5558993
      0.5515625
      0.5280534
      0.51457506
      0.4536102
      0.41659155
      0.38783583
      0.37042123
      0.34466013
      0.31110483
      

      ]

      Y:0, 1, 2, 3, 4, 5 = 列表中的位置也等于

      len(result)
      

      [

      [0.05779364 0.06816062 ...]
      [0.03569747 0.03553726 ...]
      [0.06887697 0.07845661 ...]
      [0.10796931 0.12338859 ...]
      [0.15996848 0.18395858 ...]
      [0.224204   0.2505653 ...]
      [0.3423201  0.37836382 ...]
      [0.38187546 0.38226286 ...]
      [0.39126304 0.39931965 ...]
      [0.39757547 0.4197682 ...]
      

      ]

      官方文档: https://docs.opencv.org/4.2.0/df/dfb/group__imgproc__object.html#ga586ebfb0a7fb604b35a23d85391329be

      【讨论】:

        猜你喜欢
        • 2020-04-29
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多