使用 Sift 计算计算描述符 python

Compute descriptor with Sift compute python

我正在尝试计算给定一组 Keypoint 的描述符,我用 cv2.KeyPoint 计算了这些描述符! 但是当我尝试像这样调用 sift.compute() 时,只是为了看看它是否有效:

sift= cv2.SIFT()
sift.compute(img, Keypoint)

我收到以下我无法理解的错误: <method 'compute' of 'cv2.Feature2D' objects> returned NULL without setting an error

我正在使用 Opencv 4.4

如果你看 documentation

您应该将 SIFT 声明为:

sift = cv.SIFT_create()

因此正确的代码是:

sift = cv.SIFT_create()
kp, des = sift.detectAndCompute(gray,None)

更新

如果您已经计算出 key-points (kp) 则将其绘制在当前图像上:

img=cv.drawKeypoints(gray,kp,img)
cv.imwrite('sift_keypoints.jpg',img)

您可以使用您喜欢的方法: 方法一:

img = cv2.imread('../input/data-for-knn/data/train/airplane/0000.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
sift = cv2.SIFT_create()
kp = sift.detect(gray,None)
desc = sift.compute(gray,kp)

方法二:

des = sift.detectAndCompute(gray,None)