在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 [,contastthrestthreshold [,edgethreshold [,sigma]]]]]]]) -> retval
。@param nfeat提供保留的最佳功能数量。这些功能由其分数排名
。(以SIFT算法为局部对比度)