我已经使用OpenCV实现了一个密集的特征检测器,遵循此question的一个答案。
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)
我应该尝试在图像之间实现关键点匹配吗?
答案 0 :(得分:1)
您现在可能已将此删除,但错误是signature for 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)
这会从返回中删除关键点。