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
这是我目前在大海捞针中找到针头的代码。并给我x,y坐标。但是,针头总是会在大海捞针中出现两次。我想得到第二对x,y坐标。我只在StackOverflow上找到另一篇文章讨论这个问题,它的解决方案只让我感到困惑,并且没有用。
编辑:这是我最终做的......
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)
答案 0 :(得分:1)
一个选项是在小区域中将结果cv :: Mat的值设置为零 - 可能是针的大小,围绕x,y(第一个结果的坐标)并调用:
y1,x1 = np.unravel_index(result.argmax(),result.shape)