图像中的角具有旋转不变特征,即旋转图像时角不会发生变化;但在放大或者缩小图像时,角可能发生变化。
SIFT是指尺度不变特征变换,SIFT算法用于查找图像中的尺度不变特征,返回图像中的关键点。
OpenCV提供的cv2.SIFT_create()函数用于创建SIFT对象,然后调用SIFT对象的detect()方法执行SIFT算法检测关键点。
示例代码如下。
SIFT关键点检测
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('five.jpg') #打开图像,默认为BGR格式
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换为灰度图像
sift = cv2.SIFT_create() #创建SIFT检测器
kp = sift.detect(gray,None) #检测关键点
img2 = cv2.drawKeypoints(img,kp,None,
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) #绘制关键点
img2 = cv2.cvtColor(img2,cv2.COLOR_BGR2RGB) #转换为RGB图像
plt.imshow(img2)
plt.axis('off')
plt.show() #显示绘制了关键点的图像