在opencv 3.0和早期版本中,可以通过使用代码来限制SIFT中的关键点数量:
kp, des = cv2.SIFT(150).detectAndCompute(pic, None)
但是与opencv 3.1一样,SIFT已移至xfeatures2d,因此此函数给出了错误如何在SIFT opencv3.1中设置关键点的数量
我的代码是:
def gen_sift_features(gray_img):
sift = cv2.xfeatures2d.SIFT_create()
kp, desc = sift.detectAndCompute(gray_img, None)
return kp, desc
您可以将nfeatures参数用作:
sift = cv.xfeatures2d.SIFT_create(nfeatures=150)
这是保留的最佳功能的数量。来源:
help(cv.xfeatures2d.SIFT_create)
SIFT_create(...)
SIFT_create([,nfeatures [,nOctaveLayers [,对比度阈值[,edgeThreshold [,sigma]]]])-> retval
。 @param nfeatures保留的最佳功能的数量。功能按得分排序
。 (在SIFT算法中测量为局部对比度)