实现步骤
-
cv2.xfeatures2d.SIFT_create(实例化sift) -
sift.detect(找出关键点) -
cv2.drawKeypoints(画出关键点) -
sift.compute(根据关键点计算sift向量)
参数
sift = cv2.xfeatures2d.SIFT_create()
参数说明:sift为实例化的sift函数
kp = sift.detect(gray, None)
参数说明: kp表示生成的关键点,gray表示输入的灰度图,
ret = cv2.drawKeypoints(gray, kp, img)
参数说明:gray表示输入图片, kp表示关键点,img表示输出的图片
kp, dst = sift.compute(kp)
参数说明:kp表示输入的关键点,dst表示输出的sift特征向量,通常是128维的
代码
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create() #sifi
kp = sift.detect(gray,None) #找到关键点
cv2.drawKeypoints(gray,kp,img) #绘制关键点
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

在drawKeypoints函数里设置参数为cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS就会绘制代表关键点大小的圆圈甚至可以绘制除关键点的方向。
cv2.drawKeypoints(gray,kp,img,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) #绘制关键点

使用关键点找出sift特征向量
kp, des = sift.compute(gray, kp)
print(np.shape(kp))
print(np.shape(des))
print(des[0])
SURF
SURF(加速稳健特征)算法。跟它的名字一样,这是个算法是加速版的 SIFT。
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
surf = cv2.xfeatures2d.SURF_create(7000) #SURF Hessian 的阈值
kp, des = surf.detectAndCompute(img,None) #寻找关键点
print( len(kp)) #打印关键点个数
cv2.drawKeypoints(img,kp,img,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) #绘制关键点
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()
29

本文介绍了如何在Python中使用OpenCV实现SIFT和SURF算法。首先,详细阐述了SIFT的实现步骤,包括实例化、找出关键点、画出关键点以及计算SIFT向量。接着,解释了相关的参数设置,并提供了代码示例,展示了如何在图像上绘制关键点以及获取SIFT特征向量。最后,简要提到了SURF算法,作为SIFT的加速版本。
2348

被折叠的 条评论
为什么被折叠?



