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)
'''
原圖:
繪制特征點后的圖像: