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

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

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

步骤

要使用SIFT算法检测并绘制输入图像中的关键点,可以按照以下步骤操作

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

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

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

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

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

  • 在上面的图像上显示已绘制关键点的图像

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

输入图像

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

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

示例

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

#导入所需库
import cv2

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

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

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

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

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

#显示绘制了关键点的图像
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 cv2

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

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

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

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

#在图像中画出关键点
img2=cv2.drawKeypoints(gray,kp,None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

#显示画有关键点的图像
cv2.imshow("Keypoints", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果

执行上述代码后,将打开如下 输出 窗口,显示有关键点的图像。

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

注意,关键点的大小和方向都是不同的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV