【发布时间】:2016-12-15 09:32:40
【问题描述】:
我写了一个小脚本,它可以让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)
结果是:
我的问题是:
我怎样才能检测到其他灯?因为所有的灯都非常相似,我想与图片中存在的所有灯匹配。
非常感谢!
用 Micka 的回答编辑:
在 0.2 比例距离处什么都没有出现,但如果我放 0.75 :
【问题讨论】:
-
很难解释,但也许您可以使用类似于我在此链接中使用的方法以及此链接中的链接:stackoverflow.com/questions/34310914/… 但我猜其他灯看起来不像在你的情况下足够相似。您可以尝试通过过度绘制来移除图像中最右边的灯,然后开始对修改后的图像进行检测。
-
@Micka 谢谢你的回答。在我看来,其他灯非常相似。所以我需要找到如何向我的脚本显示其他灯以便考虑。
-
你能用你在这张图片中发布的模板尝试你的算法并发布结果吗? picload.org/image/ralgwllg/sift_smaller.png
-
当然,我编辑了我的帖子;)
标签: python opencv computer-vision sift surf