我正在尝试使用opencv(tutorial)匹配关键点,如下图所示。
问题是我不确定是否需要调整某些参数,或者我完全使用了错误的方法。仅获取map.png的右侧也无济于事。
这是我的代码,也是结果。
import numpy as np
import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread('../map.png',0)
img2 = cv2.imread('../mask.png',0)
orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1,des2)
matches = sorted(matches, key = lambda x:x.distance)
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:20], None, flags=2)
cv2.imwrite('test.png', img3)
最佳答案
您使用的诸如ORB之类的特征检测器旨在匹配平移,旋转和缩放比例不同的图像之间的特征点。当图像的透 View 差异很大时(即您的情况),则不打算使用它们,因此您的方法不起作用。此外,这种算法是为诸如照片等纹理丰富的图像设计的。在您的情况下,这些特征是重复的(从第一张图像中提取的多个特征点(例如线尾)可以与另一个特征点匹配)。
在您的情况下,您应该考虑其他功能,例如基于线相交的功能,请参见tutorial以获取更多信息。这仅是一个提示,而不是解决问题的方法,因为这确实具有挑战性。
关于python - 二进制掩码之间的关键点检测和匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57336922/