在Python中使用CV2在image中查找image的两个实例

在Python中使用CV2在image中查找image的两个实例,python,image,opencv,numpy,Python,Image,Opencv,Numpy,这是我目前拥有的代码,可以在大海捞针。给我x,y坐标。然而,针总是会在干草堆中出现两次。我想得到第二对x,y坐标。我在StackOverflow上只找到了另外一篇讨论这个问题的帖子,它的解决方案只会让我困惑,而且不起作用 编辑:以下是我最后要做的 import cv2 import numpy as np import Image image = cv2.imread("haystack.bmp") needle = cv2.imread("needle.bmp") result = cv2

这是我目前拥有的代码,可以在大海捞针。给我x,y坐标。然而,针总是会在干草堆中出现两次。我想得到第二对x,y坐标。我在StackOverflow上只找到了另外一篇讨论这个问题的帖子,它的解决方案只会让我困惑,而且不起作用

编辑:以下是我最后要做的

import cv2
import numpy as np
import Image

image = cv2.imread("haystack.bmp")
needle = cv2.imread("needle.bmp")

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

print x, y

一个选项是在一个小区域内将结果cv::Mat的值设置为零,可能是针的大小,在x,y(第一个结果的坐标)附近,并调用:
y1,x1=np.unlavel\u索引(result.argmax(),result.shape)

result.argmax()为您提供最高值的标记,您需要提取两个最高值。
    img_rgb = cv2.imread('haystack.bmp')
    img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
    template = cv2.imread('needle.bmp',0)
    w, h = template.shape[::-1]

    res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
    threshold = 0.8
    loc = np.where( res >= threshold)

    for pt in zip(*loc[::-1]):
        # print pt - pt contains the coordinates I need
        cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)