繁体   English   中英

使用OpenCV密集SIFT查找图像之间的匹配

[英]Finding matches between images with OpenCV dense SIFT

按照这个问题的答案之一,我已经使用OpenCV实现了密集特征检测器。

sift = cv2.SIFT()
dense=cv2.FeatureDetector_create("Dense")
kp1=dense.detect(template_detect)
des1=sift.compute(template_detect,kp1)
kp2=dense.detect(image_detect)
des2=sift.compute(image_detect,kp2)

它运作良好,但是,我有兴趣比较这两个图像以尝试找到它们之间的匹配。 但是,当尝试像下面那样实现它时,出现错误“ TypeError:queryDescriptors不是数字元组”。

bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
matches = bf.match(des1,des2)
matches = sorted(matches, key = lambda x:x.distance)
img3 = cv2.drawMatches(template_detect,kp1,image_detect,kp2,matches[:4], 2, None)

我应该尝试在图像之间实现关键点匹配的更好方法吗?

您可能现在已经删除了它,但是错误是compute()签名

Python: cv2.SIFT.compute(image, keypoints[, descriptors]) → keypoints, descriptors

您的代码为des1 / des2分配了关键点和描述符的元组,这不是您想要的。 更正您的代码将是;

sift = cv2.SIFT()
dense=cv2.FeatureDetector_create("Dense")
kp1=dense.detect(template_detect)
_, des1=sift.compute(template_detect,kp1)
kp2=dense.detect(image_detect)
_, des2=sift.compute(image_detect,kp2)

这会将关键点从收益中删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM