import cv2
import numpy as np
from matplotlib import pyplot as pltdef show_photo(name,picture):#图像显示函数cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\data/cfx.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)#获取关键点img = cv2.drawKeypoints(gray,kp,img)#绘制关键点
show_photo('drawKeypoints',img)kp, des = sift.compute(gray,kp)#一个图 一个关键点
print(np.array(kp).shape)#关键点的数量 #结果为:(12,)
des.shape#将这些数量的关键点都转换为一个128维的向量,没人长度就是一个128维向量 #结果为:(12, 128)
des[0]
#结果为:
'''
array([ 0., 0., 0., 0., 0., 0., 0., 1., 0.,0., 0., 0., 0., 0., 19., 11., 0., 0.,0., 0., 0., 0., 60., 8., 0., 0., 0.,0., 0., 0., 65., 7., 19., 0., 0., 0.,0., 0., 0., 10., 100., 2., 0., 5., 1.,0., 93., 149., 8., 0., 40., 36., 3., 3.,149., 64., 0., 0., 93., 13., 0., 0., 149.,26., 44., 3., 0., 0., 0., 0., 0., 1.,149., 31., 1., 18., 33., 1., 6., 30., 32.,6., 91., 141., 147., 6., 18., 10., 0., 0.,149., 38., 6., 0., 6., 1., 25., 3., 0.,0., 0., 0., 0., 0., 149., 29., 0., 0.,39., 4., 0., 0., 35., 4., 1., 5., 149.,24., 0., 0., 0., 0., 4., 2., 22., 2.,0., 0.], dtype=float32)
'''
原图:
绘制特征点后的图像: