OpenCV Python 如何使用SIFT算法检测和绘制图像中的关键点

OpenCV Python 如何使用SIFT算法检测和绘制图像中的关键点

SIFT(尺度不变特征变换) 是一种尺度不变的特征描述方法。它可以检测图像中的关键点并计算其描述符。首先我们要用 cv2.SIFT_create() 创建一个 SIFT 对象,然后使用 sift.detect() 来检测关键点,其中 sift 是创建的SIFT对象。要绘制关键点,我们使用 cv2.drawKeypoints() 方法。

步骤

要使用SIFT算法检测和绘制输入图像中的关键点,可以按照以下步骤进行:

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

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

  • 使用 sift=cv2.SIFT_create() 初始化SIFT对象的默认值。

  • 检测灰度图像中的关键点。使用 sift.detect() 方法。它返回关键点 kp

  • 在图像上绘制检测到的关键点 kp ,使用 cv2.drawKeypoints() 函数。要绘制丰富的关键点,可以传递参数 flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS

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

让我们看一下使用SIFT算法检测和绘制输入图像中的关键点的示例。

输入图像

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

OpenCV Python 如何使用SIFT算法检测和绘制图像中的关键点

示例

在这个程序中,我们使用SIFT算法检测和绘制输入图像中的关键点。

# import required libraries
import cv2

# read input image
img = cv2.imread('architecture2.jpg')

# convert the image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Initiate SIFT object with default values
sift = cv2.SIFT_create()

# find the keypoints on image (grayscale)
kp = sift.detect(gray,None)

# draw keypoints in image
img2 = cv2.drawKeypoints(gray, kp, None, flags=0)

# display the image with keypoints drawn on it
cv2.imshow("Keypoints", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

执行上述代码后,将打开以下输出窗口,显示绘制有关键点的图像。
OpenCV Python 如何使用SIFT算法检测和绘制图像中的关键点

请注意,关键点以不同的颜色绘制。你可以将颜色(例如,红色为(0,0,255))作为参数传递给 drawKeypoints() 函数,以绘制单色关键点。

示例

在此示例中,我们将看到如何使用SIFT算法在输入图像中检测和绘制关键点。 我们将参数 flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS 传递给 cv2.drawKeypoints() 函数。

# import required libraries
import cv2

# read input image
img = cv2.imread('architecture2.jpg')

# convert the image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Initiate SIFT object with default values
sift = cv2.SIFT_create()

# find the keypoints on image (grayscale)
kp = sift.detect(gray,None)

# draw keypoints in image
img2=cv2.drawKeypoints(gray,kp,None,flags=cv2.DRAW_MATCHES_FLAG
S_DRAW_RICH_KEYPOINTS)

# display the image with keypoints drawn on it
cv2.imshow("Keypoints", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

在执行上述代码时,它会打开如下 输出 窗口,显示带有绘制关键点的图像。

OpenCV Python 如何使用SIFT算法检测和绘制图像中的关键点

注意,关键点以不同的大小和方向绘制。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程