在图片上检测多个对象

Ess*_*sex 6 python opencv computer-vision surf sift

我写了一个小脚本,可以在全局图片中找到一个对象SIFT descriptors method.但我对同一张照片中的多个检测有疑问.

我有这张全球图片:

在此输入图像描述

我有这个模板:

在此输入图像描述

我的脚本看起来像:

import numpy as np
import cv2

#########################
# SIFT descriptors part #
#########################

img1 = cv2.imread('/Users/valentinjungbluth/Desktop/SIFT:SURF Algo/lampe.jpg',0)
img2 = cv2.imread('/Users/valentinjungbluth/Desktop/SIFT:SURF Algo/ville.jpg',0)

# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()

print (img1.dtype)
print (img2.dtype)


kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2,k=2)

good = []
for m,n in matches :
    if m.distance < 0.2*n.distance :
        good.append([m])

img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)

cv2.imwrite('matches.jpg',img3)
Run Code Online (Sandbox Code Playgroud)

结果是:

在此输入图像描述

我的问题是:

我怎么能发现这个其他的灯?因为所有灯都非常相似,我想与图片中的所有灯匹配.

非常感谢 !

编辑与Micka的回答:

在此输入图像描述

0.2比例距离没有出现,但如果我放0.75:

在此输入图像描述

Ric*_* M. 1

这是一个很好的问题。我可以想到有几种方法可以做到这一点:

1.滑动开窗技术——通过制作一个窗口,模板的大小,并在整个图像中滑动,可以在全局图像中搜索“模板”。您可以对金字塔执行此操作,以便考虑比例和平移变化。滑动窗口技术

  1. SIFT - 尝试将全局图像与模板进行匹配并找到所有匹配项。然后你应该过滤相对姿势的匹配。可能您需要另一个过滤,但我认为这种方法更通用,因为它比以前的方法能满足更多的限制。

希望能帮助到你!