如何在OpenCV Python中检测和绘制FAST特征点?

如何在OpenCV Python中检测和绘制FAST特征点?

FAST (来自加速段测试的特征)是一种高速角点检测算法。我们使用 FAST 算法检测图像中的特征。我们首先使用 cv2.FastFeatureDetector_create() 创建 FAST 对象。然后使用 fast.detect() 检测特征点,其中fast是所创建的 FAST 对象。要绘制特征点,我们使用 cv2.drawKeypoints()

步骤

为了使用FAST特征检测器在输入图像中检测和绘制特征点,您可以按照以下步骤进行。

  • 导入所需的库 OpenCVNumPy 。确保您已经安装了它们。

  • 使用 cv2.imread() 方法读取输入图像。指定图像的完整路径。使用 cv2.cvtColor() 方法将输入图像转换为灰度图像。

  • 使用默认值初始化 FAST 对象 fast=cv2.FastFeatureDetector_create() 。您可以选择使用 fast.setNonmaxSuppression(0) 将非最大抑制设置为False。

  • 在灰度图像中检测特征点。使用 fast.detect(gray, None) 。它返回关键点kp。

  • 绘制检测到的关键点 kp 在图像上使用 cv2.drawKeypoints() 函数。

  • 显示带有绘制出的关键点的图像。

让我们看看使用FAST特征检测器检测和绘制输入图像中的特征点的示例。

输入图像

我们将使用以下图像作为示例中的输入文件。

如何在OpenCV Python中检测和绘制FAST特征点?

示例

在此程序中,我们使用FAST算法检测和绘制特征点。默认的 nonmaxSuppression 设置为 True

# 导入所需库
import cv2

# 读取输入图像
img = cv2.imread('architecture.jpg')

# 将图像转换为灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 初始化具有默认值的 FAST 对象
fast = cv2.FastFeatureDetector_create()

# 查找图像(灰度)上的关键点
kp = fast.detect(gray,None)

# 在图像中绘制关键点
img2 = cv2.drawKeypoints(img, kp, None)

# 打印所有默认参数
print("Threshold: ", fast.getThreshold())
print("nonmaxSuppression: ", fast.getNonmaxSuppression())
print("neighborhood: ", fast.getType())
print("Total Keypoints with nonmaxSuppression: ", len(kp))

# 显示绘制了关键点的图像
cv2.imshow("Keypoints with nonmaxSuppression", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

执行后,将产生以下 输出

Threshold: 10
nonmaxSuppression: True
neighborhood: 2
Total Keypoints with nonmaxSuppression: 5791

我们得到了以下窗口,显示了在其上绘制了关键点的图像 −

如何在OpenCV Python中检测和绘制FAST特征点?

示例

在此程序中,我们使用 FAST 算法检测和绘制特征点。我们将 nonmaxSuppression 设置为 False

# 导入所需库
import cv2

# 读取输入图像
img = cv2.imread('architecture.jpg')

# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 使用默认值初始化FAST对象
fast = cv2.FastFeatureDetector_create()

# 禁用非极大值抑制
fast.setNonmaxSuppression(0)

# 在图像(灰度)上查找关键点
kp = fast.detect(gray,None)

# 打印所有默认参数
print("Threshold: ", fast.getThreshold())
print("nonmaxSuppression: ", fast.getNonmaxSuppression())
print("neighborhood: ", fast.getType())
print("Total Keypoints without nonmaxSuppression: ", len(kp))
img2 = img.copy()
img2 = cv2.drawKeypoints(img2, kp, None)

# 显示绘制了关键点的图像
cv2.imshow('Keypoints without nonmaxSuppression',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果

执行后,会产生以下 输出

Threshold: 10
nonmaxSuppression: False
neighborhood: 2
Total Keypoints without nonmaxSuppression: 27101

我们得到以下窗口,显示了绘制了关键点的图像−

如何在OpenCV Python中检测和绘制FAST特征点?

我们注意到,当 nonmaxSuppressionFalse 时,检测到的总关键点数比 nonmaxSuppressionTrue 时更多。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV