参考资料:
FAST角点检测算法笔记_亦枫Leonlew的博客-CSDN博客
【OpenCV-Python】28.OpenCV的特征检测——特征点检测_opencv特征点检测_机器视觉小学徒的博客-CSDN博客
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread("../SampleImages/shunsuke.jpg", cv.IMREAD_COLOR)
#FAST关键点检测
#1. 创建FAST对象
# cv.FastFeatureDetector_create()
fast = cv.FastFeatureDetector_create()
#2. 设置阈值
# fast.setThreshold(thresh)
# thresh: 阈值
fast.setThreshold(20)
#3. 确保非极大值抑制打开
fast.setNonmaxSuppression(1)
#4. 调用FAST对象的detect方法检测关键点
# kp = fast.detect(img, None)
# kp:关键点信息
# img:待检测图像
keypoints = fast.detect(img, None)
#绘制关键点
img_threshold20 = img.copy()
cv.drawKeypoints(img_threshold20, keypoints, img_threshold20, (0,255,0))
#关闭非极大值抑制
fast.setNonmaxSuppression(0)
keypoints = fast.detect(img, None)
img_nonmaxsuppression_disabled = img.copy()
cv.drawKeypoints(img_nonmaxsuppression_disabled, keypoints, img_nonmaxsuppression_disabled, (0,255,0))
#显示图像
fig,axes = plt.subplots(nrows=1, ncols=3, figsize=(16,16), dpi=100)
axes[0].set_title("Original")
axes[0].imshow(img[:,:,::-1])
axes[1].set_title("Non Max Suppression Enabled")
axes[1].imshow(img_threshold20[:,:,::-1])
axes[2].set_title("Non Max Suppression Disabled")
axes[2].imshow(img_nonmaxsuppression_disabled[:,:,::-1])