在Python中使用CV2在图像中查找两个图像实例

时间:2014-01-02 18:56:09

标签: python image opencv numpy

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)

1 个答案:

答案 0 :(得分:1)

一个选项是在小区域中将结果cv :: Mat的值设置为零 - 可能是针的大小,围绕x,y(第一个结果的坐标)并调用:     y1,x1 = np.unravel_index(result.argmax(),result.shape)